fork download
  1. <?php
  2. class A {
  3. private function foo() {
  4. echo "[A#foo] success!\n";
  5. }
  6. public function test() {
  7. echo "[A#test] calling instance method\n";
  8. $this->foo();
  9. echo "[A#test] calling via static\n";
  10. static::foo();
  11. }
  12. }
  13.  
  14. class B extends A {
  15. /* foo() будет скопирован в В, следовательно его область действия по прежнему А,
  16.   и вызов будет успешен*/
  17. }
  18.  
  19. class C extends A {
  20. private function foo() {
  21. /* исходный метод заменен; область действия нового метода С */
  22. echo "[C#foo]\n";
  23. }
  24. }
  25.  
  26. $b = new B();
  27. $b->test();
  28. $c = new C();
  29. $c->test(); //не верно
  30.  
Runtime error #stdin #stdout #stderr 0.02s 24448KB
stdin
Standard input is empty
stdout
[A#test] calling instance method
[A#foo] success!
[A#test] calling via static
[A#foo] success!
[A#test] calling instance method
[A#foo] success!
[A#test] calling via static
stderr
PHP Fatal error:  Call to private method C::foo() from context 'A' in /home/BOJR0j/prog.php on line 10