Hi!
Ich habe 3 Klassen, 2 davon erweitern die erste Klasse. Ich möchte von einer der beiden Klassen auf eine Variable der anderen zugreifen wobei der Inhalt dieser in der parent-Klasse definiert wird.
Das sieht mir nach einem schweren Design-Fehler aus. Es gibt sicher eine bessere Lösung für das eigentliche Problem ...
Wenn du auf Klassen-Ebene hin- und hergreifen willst, geht das nur mit Klassenvariablen, also solchen, die in der Klasse als static definiert sind. Dazu muss die eine Klasse die andere kennen, was eine unschöne Abhängigkeit ergibt. Und mehrere Objekte greifen immer auf die selbe Variable zu, weil es eben eine Klassenvariable ist.
Auf Objekt-Ebene hingegen kann ein Objekt nur über eine Instanz eines anderen Objekts auf dessen Mitglieder zugreifen. Dabei kommt es drauf an, ob es besser ist, direkt zuzugreifen oder eine Zugriffsmethode zu verwenden. Mit einer Zugriffsmethode macht man in der Regel nichts verkehrt.
class bla extends foo {
public function test() {
global $a;
Damit wird $a ein Verweis auf den globalen Variablenspeicher.
class start extends foo {
public function run() {
$a = $this->bar(); // $a soll in bla->test() verfügbar sein
Hier ist $a eine lokale Variable, die außerhalb der Funktion/Methode nicht bekannt ist.
Der Grund ist, dass ich $a in der start-Klasse durch andere Klassen bei bedarf bearbeiten können will.
Wenn ich eine Variable ausserhalb aller Klassen definiere und in einer Klasse dann
global $Variable;
schreibe, dann habe ich auch Zugriff darauf. Wo liegt hier mein Fehler?
Das Schlüsselwort global wirkt sich nur auf die Sichtbarkeit der angegebenen Variablen im den aktuellen Scope aus. Die Variable wird dadurch nicht generell superglobal (wie $_GET/$_POST).
Lo!