Seltsames Verhalten beim überschreiben der privaten Methoden

Betrachten Sie die folgende Stück 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();

Nun, die änderung der Sichtbarkeit des m() Methode, die ich bekomme:
(+ für public, - für 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 scheint sich zu Verhalten wie public).

Ich hatte erwartet, alles zu Verhalten, wie es tut, wenn beide erklärten public. Aber obwohl foo->call() und bar->callbar() sind im wesentlichen die gleiche Sache, Sie ergeben auch unterschiedliche Ergebnisse, je nach der Sichtbarkeit der m() im foo und bar. Warum geschieht dieses?

InformationsquelleAutor der Frage NullUserException | 2010-09-21

Schreibe einen Kommentar