PHP でプライベートメソッドをオーバーライドした場合
さて、問題です。以下のコードの実行結果はどうなるでしょう?
<?php class A { private function foo() { echo "A foo()\n"; } public function bar() { echo 'class ', get_class($this), ", "; $this->foo(); } } class B extends A { public function foo() { echo "B foo()\n"; } } $b = new B(); $b->bar();
答え。
以下のようになります。エラーにはなりません。
class B, A foo()
なんとなく釈然としないんですが、以前からそういうものなんですよね。
次の問題です。以下のコードの実行結果はどうなるでしょう?
<?php class A { public function foo() { echo "A foo()\n"; } public function bar() { echo 'class ', get_class($this), ", "; $this->foo(); } } class B extends A { private function foo() { echo "B foo()\n"; } } $b = new B(); $b->bar();
答え。
Fatal error: Access level to B::foo() must be public (as in class A) になります。
これも釈然としないんですが、これも以前からそういうものなんですよね。