Странное поведение при переопределении приватных методов
Рассмотрим следующий фрагмент кода:
class foo {
private function m() {
echo 'foo->m() ';
}
public function call() {
$this->m();
}
}
class bar extends foo {
private function m() {
echo 'bar->m() ';
}
public function callbar() {
$this->m();
}
}
$bar = new bar;
$bar->call();
$bar->callbar();
Теперь, изменяя видимостьm()
Метод, я получаю:
(+
заpublic
, -
заprivate
)
Visibility bar->call() bar->callbar()
======================================================
-foo->m(), -bar->m() foo->m() bar->m()
-foo->m(), +bar->m() foo->m() bar->m()
+foo->m(), -bar->m() ERROR ERROR
+foo->m(), +bar->m() bar->m() bar->m()
(protected
кажется, ведет себя какpublic
).
Я ожидал, что все будет вести себя так же, как и тогда, когда оба объявленыpublic
, Но хотяfoo->call()
а такжеbar->callbar()
по сути одно и то же, они дают разные результаты в зависимости от видимостиm()
вfoo
а такжеbar
, Почему это происходит?