Hallo,
Ich bin bisher davon ausgegangen, dass $this in Methoden immer eine Referenz auf das aufrufende Objekt ist. Also bei einem Aufruf der Form „objekt->methode()“ sollte ein in der Definition von „methode“ vorkommendes $this jetzt auf „objekt“ zeigen.
Bei folgendem Beispiel ist das aber nicht so:
Ich erwarte als Ausgabe 'b', weil ja die Methode test von $b aufgerufen wurde und das $this entsprechend auf das Attribut B::$x mit dem Wert 'b' zeigen sollte. Aber stattdessen wird das nicht-statische Attribut $x der Basisklasse irgendwie statisch (?) aufgerufen.
Woran liegt das?
Noch unlogischer finde ich, dass bei der Änderung der Sichtbarkeit auf protected auf einmal alles wie erwartet funktioniert. Was hat das damit überhaupt zu tun?
Ich bin bisher davon ausgegangen, dass $this in Methoden immer eine Referenz auf das aufrufende Objekt ist. Also bei einem Aufruf der Form „objekt->methode()“ sollte ein in der Definition von „methode“ vorkommendes $this jetzt auf „objekt“ zeigen.
Bei folgendem Beispiel ist das aber nicht so:
PHP-Code:
class A {
private $x = 'a';
public function test() {
echo $this->x;
}
}
class B extends A {
private $x = 'b';
}
$b = new B();
$b->test(); // Ausgabe: 'a'!
Ich erwarte als Ausgabe 'b', weil ja die Methode test von $b aufgerufen wurde und das $this entsprechend auf das Attribut B::$x mit dem Wert 'b' zeigen sollte. Aber stattdessen wird das nicht-statische Attribut $x der Basisklasse irgendwie statisch (?) aufgerufen.
Woran liegt das?
Noch unlogischer finde ich, dass bei der Änderung der Sichtbarkeit auf protected auf einmal alles wie erwartet funktioniert. Was hat das damit überhaupt zu tun?
Kommentar