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

Antworten auf die Frage(6)

Ihre Antwort auf die Frage