- 締切済み
PHPでのstatic(静的)メソッド・メンバの継承について教えてください。
次のような例にて、私の考えているように動作しません。 class ClassA { protected static function method1() { echo "111"; } public static function method2() { self::method1(); } } class ClassB extends ClassA { protected static function method1() { echo "222"; } } ClassB::method2(); // ---> 111 と表示される。 ------ 私としては、222と表示されると予測していたのですが、 思ったように動作しません。 継承された子クラスClassBにて、method2() が実行され、 その中での self::method1(); のselfが、 ClassBではなく、親クラスのClassAを指し示していると思われます。 私としては、継承された子クラスでのselfは、相対的に、子クラスをあらわしてほしいのですが。 そういうものだ、と言われればそれまでなのですが、 これだと、self::method1(); でも、ClassA::method1(); でも同じことになってしまい、 selfの存在意義がないことになってしまうのでは?と思うのです。 私の理解のどこが間違っているのか教えていただけると幸いです。 どうぞよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
staticメソッドはオーバーライド出来ないものだと思います。 selfの存在意義は自分自身、parentは基底って感じになっていると思います。
お礼
回答ありがとうございます。 継承できないとなると、 self::method1(); のところを、 ClassA::method1(); と書いても同じことになると思います。 ClassA::method1(); ではなく、 self::method1(); と書くメリットを教えていただけないでしょうか。