Moin!
Ich hab eine Klasse, in welcher Instanzen der selben Klasse erzeugt werden, also Rekursiv. Diese Sub-Instanzen können wieder mehrere Sub-Instanzen haben, und so weiter, sodass ich eine Klassen-Baumstruktur erhalte.
Nun ist es nötig, dass ich aus einer Sub-Instanz eine Variable in der übergeordneten Instanz verändern kann. Dazu hab ich in der Klasse eine Variable Eingefügt, in die beim Erstellen der Instanz &$this (Also die Referenz) der erstellenden Instanz gespeichert wird. Ändere ich nun die Variable über die Referenz, so ändern sich die Werte in der übergeordneten Instanz nicht.
Wie kann ich also eine Variable in einem übergeordneten Objekt ändern, ohne auf das übergeordnete Objekt von aussen zuzugreifen (Ich habe also nicht die Möglichkeit, die Variable mithilfe einer Methode aus der Sub-Klasse zu "ziehen")?
Ist warscheinlich etwas schwer zu verstehen, aber es gibt ja Leute hier, die die Kompliziertesten Texte entschlüsseln können. Danke schonmal an jene, und alle, die versuchen das zu Verstehen, und zu Helfen. Hier noch mal ein Code, der das Problem beschreibt. Er ist nicht der Originalcode, desshalb lässt sich kein Sinn erkennen, er ist jedoch wesentlich kürzer, übersichtlicher und leichter zu Verstehen.
Ich hab eine Klasse, in welcher Instanzen der selben Klasse erzeugt werden, also Rekursiv. Diese Sub-Instanzen können wieder mehrere Sub-Instanzen haben, und so weiter, sodass ich eine Klassen-Baumstruktur erhalte.
Nun ist es nötig, dass ich aus einer Sub-Instanz eine Variable in der übergeordneten Instanz verändern kann. Dazu hab ich in der Klasse eine Variable Eingefügt, in die beim Erstellen der Instanz &$this (Also die Referenz) der erstellenden Instanz gespeichert wird. Ändere ich nun die Variable über die Referenz, so ändern sich die Werte in der übergeordneten Instanz nicht.
Wie kann ich also eine Variable in einem übergeordneten Objekt ändern, ohne auf das übergeordnete Objekt von aussen zuzugreifen (Ich habe also nicht die Möglichkeit, die Variable mithilfe einer Methode aus der Sub-Klasse zu "ziehen")?
Ist warscheinlich etwas schwer zu verstehen, aber es gibt ja Leute hier, die die Kompliziertesten Texte entschlüsseln können. Danke schonmal an jene, und alle, die versuchen das zu Verstehen, und zu Helfen. Hier noch mal ein Code, der das Problem beschreibt. Er ist nicht der Originalcode, desshalb lässt sich kein Sinn erkennen, er ist jedoch wesentlich kürzer, übersichtlicher und leichter zu Verstehen.
PHP-Code:
class class1 {
var $subclass = NULL;
var $variable = 'alter Wert';
var $parentcls = true;
var $parentref = NULL;
function class1 ($parentcls = true, $parentref = NULL) {
$this -> parentcls = $parentcls;
if (!$this -> parentcls)
$this -> parentref = $parentref;
}
function create_subclass () {
# Erstellen der Sub-Klasse mit Referenz-Parameter zur eigenen Instanz:
$this -> subclass = new class1 (false, &$this);
}
function set_var ($var) {
$this->variable = $var;
if (!$this -> parentcls)
# Variablenwert auch in der Elternklasse zuweisen:
$this -> parentref -> variable = $var;
}
function echo_var () {
echo $this -> variable . '<br>';
}
}
$cls = new class1;
$cls -> create_subclass ();
$cls -> subclass -> set_var ('neuer Wert');
$cls -> subclass -> echo_var ();
$cls -> echo_var ();
# Ergebniss:
#
# neuer Wert
# alter Wert
#
# Soll-Ergebniss:
#
# neuer Wert
# neuer Wert
Kommentar