[PHP] 親クラスのstaticメソッドから子クラスでオーバーライドされたstaticメソッドを呼ぶ

スポンサーリンク

PHPでクラス内からstaticメソッドを呼ぶ方法として
self::foo();
のようにselfを使うことができますが、継承が絡むとselfは思い通り動いてくれないことがあります。

このようにabstract staticメソッドfoo()を呼び出すことだけを決めたメソッドbar()を抽象親クラスで定義し、サブクラスでこのfoo()をオーバーライドすることでbar()が動くように実装すると

Fatal error: Uncaught Error: Cannot call abstract method Base::foo() in /**/abstract_static.php:7

というエラーが出ます。Base内で使われたselfはbar()が定義されたBaseを参照しており、自動的にサブクラスのfoo()を参照することはできません。

static::

これを解決してくれるのがstatic::です。

static::は呼び出した際のクラスを参照するようになっているので、これでちゃんと
Sub foo
と出力されます。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする