$foo = new B($this);
-Code wie dies leider nicht meine Bedürfnisse passt. Gibt es eine andere Möglichkeit, auf die Eigenschaften des übergeordneten Objekts zuzugreifen?
Ich werde versuchen zu erklären, warum. Wir schreiben eine Spielesoftware und einige Klassen haben sehr "ungewöhnliche" Abhängigkeiten und beeinflussen sich gegenseitig auf unterschiedliche Weise. Das ist der Grund, warum Code manchmal ohne Unterstützung von Eltern fast nicht mehr unterstützt wird (manchmal sogar mehrere Eltern aus verschiedenen Kontexten, d. H. Ein Squad kann zu Battle und zu User etc. gehören).
Und nun der Grund, warum Links mich nicht befriedigen. Wenn ich eine Ausgabe für die Clientseite erzeuge, verwende ich eine Art von serialisierenden Objekten in XML. Es funktioniert sehr gut, bis es rekursive Referenzen wie die Links zu den Eltern trifft. Ich kann sie beschützen, aber dann verlieren sie ihre Verwendung, d. H.(Dummy-Beispiel)
$this->squad->battle->getTeam($tid)->getSquad($sqid)->damageCreature(...);
Der andere Weg - Serialisierungsmethode in jeder serializable Klasse zu implementieren und es in Serializer wie folgt aufrufen:
$obj->toXML($node);
$this->appendChild($node);
aber das ist eine Menge Sachen zu schreiben und zu unterstützen! Und manchmal erzeuge ich die Objekte für den Serializer dynamisch (weniger Verkehr).
Ich denke sogar über einen Hack: zu "lehren" Serializer einige Eigenschaften in bestimmten Klassen zu ignorieren)). Huh ... schlechte Idee ...
Es ist eine lange Diskussion, aber glauben Sie mir, dass Registry und Observer nicht passen. Gibt es noch andere Ideen?
Vielen Dank. In meinem speziellen Fall gilt das Registrierungsmuster in der Tat. (Klasse A öffnet mehrere Datenbankverbindungen und muss Konfigurationsinformationen an B und andere Klassen übergeben.) –