Seltsames Verhalten beim Überschreiben privater Methoden
Betrachten Sie den folgenden Code:
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();
Now, Sichtbarkeit des @ ändem()
Methode bekomme ich:
(+
zumpublic
, -
zumprivate
)
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
scheint sich wie @ zu verhaltpublic
).
Ich habe erwartet, dass sich alles so verhält, wie es ist, wenn beide als @ deklariert werdepublic
. Aber trotzdemfoo->call()
undbar->callbar()
sind im Wesentlichen dasselbe, sie liefern unterschiedliche Ergebnisse, abhängig von der Sichtbarkeit vonm()
imfoo
undbar
. Warum passiert das