[PHP] 既存のCLASSオブジェクトを変数stringで実行すると$thisが利用できない問題

php-2060502_1280
LINEで送る
Share on GREE
Share on LinkedIn

WordPressのページ表示が重いので、自己流のフレームワークでCMS的なモノを作ろうとしていますが、ポイントは、HTMLテンプレートから、文字列操作をして、関数を実行できるような仕様にして、htmlファイル操作で便利にページ構築できるようにしたいと考えた。
そんな時、HTMLに書かれた関数記述を実行させる方法を模索した。

やりたい事

下記のようなHTMLテンプレートファイルをPHPで読み込んで、該当の関数実行箇所で、関数からのレスポンス値で書き換える

実行後のソース

functionを実行

aaaというfunctionを文字列から実行するには、以下のようにできます。

classを実行

classを実行する時もfunctionと同じ要領でいけます。

問題発生

無事に構築が終わり、一安心したところで、一つ問題が発生しました。
classオブジェクトの中に、$thisを使っているfunctionがあると、エラーが発生してPHPが止まってしまい真っ白画面になってしまいます。

classプログラムは以下のような感じです。

解決方法

色々模索してみたところ、以下の方法でうまくできました。

これってPHPのバグなのか、namespaceなどをちゃんと利用しなければいけない仕様なのか、分からないが、new宣言して、そのオブジェクトを当ててあげるといいというだけでした。
今後のバージョンアップで不具合になるかもしれませんが、とりあえず、成功しました。
ちなみに、PHPのバージョンは、「7.0.13」です。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*