Comportamiento extraño al anular métodos privados
Considere la siguiente pieza de código:
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();
Ahora, cambiando la visibilidad de lam()
método, obtengo:
(+
parapublic
, -
paraprivate
)
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
parece comportarse comopublic
)
Esperaba que todo se comportara como lo hace cuando ambos se declaranpublic
. Pero aunquefoo->call()
ybar->callbar()
son esencialmente lo mismo, producen resultados diferentes dependiendo de la visibilidad dem()
enfoo
ybar
. ¿Por qué pasó esto?