• 締切済み

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の存在意義がないことになってしまうのでは?と思うのです。 私の理解のどこが間違っているのか教えていただけると幸いです。 どうぞよろしくお願いします。

みんなの回答

回答No.1

staticメソッドはオーバーライド出来ないものだと思います。 selfの存在意義は自分自身、parentは基底って感じになっていると思います。

endo_ichi
質問者

お礼

回答ありがとうございます。 継承できないとなると、 self::method1(); のところを、 ClassA::method1(); と書いても同じことになると思います。 ClassA::method1(); ではなく、 self::method1(); と書くメリットを教えていただけないでしょうか。

関連するQ&A