質問: タイトルが適切なのかわかりませんが、 FuelPHPでできたシステムをサーバ移行しているのですが、下記のようなエラーが生じており、どうにも正常に動くようにさせられずにおります。 ``` Fatal error: Access to undeclared static property: Controller_Auth::$this in...(略) ``` Controller_AuthのクラスがBasecontrollerを継承しているのですが、 Basecontroller内の下記のような記述部分にエラーが生じているようです。 ``` if (method_exists(static::$this, 'before_controller')) { static::before_controller(); } ``` いろいろ調べたのですが、staticを宣言していないメソッドを呼び出すのに「::」を使うのはNGということであっているのでしょうか? たしかに、Controller_Auth内でstaticを宣言したメソッドは存在していませんでした。 そうであった場合に書きかえ方がわからずでして、もし書きかえ方がわかる方いましたら、教えていただけると助かります。
回答: `static::$this`という書き方を認識するのは、PHP 5.3系列と、PHP 5.4~5.5の**途中まで**です。 #65911の変更が適用された、PHP 5.4.22、PHP 5.5.6以上(もちろん、PHP 5.6以上も含む)ではエラーとなります(3v4l)。 そして、`method_exists`の引数は単なる`$this`でも継承先を見てくれるので、ただの`$this`に置き換えて問題なさそうです(3v4l)。