重複の可能性:
PHP の遅延静的バインディングとは正確には何ですか?
この例では、PHP は予想とは逆に、"YES" ではなく "NO" を出力します。
onを削除static
しfunction c()
、置き換えself::
て$this->
do を実行すると、うまく$e = new B; $e->c();
いきます。
これは、親クラスの関数が継承されたクラスのオーバーライドされた関数を呼び出すためにインスタンス化が必要であることを意味しますか?
(補足質問: これは PHP の癖ですか、それともこのロジックは他のほとんどのプログラミング言語にも当てはまりますか? もしそうなら、その背後にある理論的根拠は何ですか?)
class A {
static function c() {
self::d();
}
static function d() {
echo "NO :(\n";
}
}
class B extends A {
static function d() {
echo "YES :)\n";
}
}
B::c();