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 { private function foo() { echo "B foo()\n"; } } $b = new B(); $b->bar();
答え。以下のようになります。エラーにはなりません。
class B, A foo()
Class A の bar() メソッドのコンテクストからは、子クラス B の private メソッドは見えません。
次の問題です。以下のコードの実行結果はどうなるでしょう?
<?php class A { public function bar($method) { echo 'class ', get_class($this), ", "; $this->$method(); } } class B extends A { private function foo() { echo "B foo()\n"; } protected function baz() { echo "B baz()\n"; } } $b = new B(); $b->bar('baz'); $b->bar('foo');
答え。
class B, B baz() class B, PHP Fatal error: Call to private method B::foo() from context 'A'
class A の bar() メソッドのコンテクストからは、子クラス B の protected メソッドはコールできますが、private メソッドはアクセスできません。
最後の問題です。以下のコードの実行結果はどうなるでしょう?
<?php class A { public 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, B foo()
これは予想通りだったのではないでしょうか。