Ich habe ein Objekt von dem ich nur den Klassennamen kenne, sagen wir "A". Ich versuche, auf die Eigenschaften dieses Objekts zuzugreifen. Leider versuche ich, auf sie von einer anderen Objektinstanz zuzugreifen, die vom ersten Objekt einer vollständigen anderen Klasse (noch erweitert oder verwandt) erstellt wird. Vereinfachter Code unten, um die Situation zu erklären.Erhalte Eigenschaften von "Parent Creating" Objekt
Class A {
public $var; //some important stuff
function createObjectB() {
$b = new B();
}
}
Class B {
// a totally different class not related with A
}
Dies ist Dritter Code einer Komponente in einem CMS, so kann ich mit Kern-Code nicht mess (oder zumindest ich glaube?) Versuchen, die Immobilie zu übergeben zusammen mit dem B erstellte Objekt ohne Fehler verursacht zu einem späteren Zeitpunkt, wenn diese Komponente aktualisiert wird.
Ich kann das Objekt von Klasse B aufgrund einer "Layout-Vorlage" Datei später in der B-Klasse aufgerufen, die nicht berührt werden, wenn der Kern-Code aktualisiert wird. Auf diese Weise kann ich keine dieser Klassen wirklich berühren.
Mit einem debug_backtrace()
von object B
kann ich ein paar Schritte zurück die Eigenschaften des Objekts sehen, das ich brauche, aber ich denke, es ist eher hacky, die Funktion auf diese Weise zu verwenden, um die Informationen zu erhalten, die ich brauche, und ich denke, dass es ziemlich ist intensive Funktion auch zu verwenden.
Ich bin ein Anfänger in PHP, ist es einfach falsch, was ich versuche zu erreichen? Gibt es einen besseren Weg?
Können Sie beim Erstellen von B keinen Verweis auf die Klasse A übergeben? '$ b = new B ($ this);' – Federkun
Leider ist es eine Komponente von Drittanbietern, wenn ich mit Core-Dateien hacke, befürchte ich, dass ich später in Schwierigkeiten komme, wenn der Code von den Anbietern aktualisiert wird. Ist das richtig zu denken oder es ist nur ein Aufhebens? – Gruber
Nun, dann scheint das, was Sie wollen, eine globale Variable verwenden. Dies ist ein ** schlechtes Verfahren **, ist aber besser als 'debug_backtrace'. Wenn Sie das Objekt "B" oder das Konstrukt des Objekts "A" erstellen, können Sie '$ GLOBALS ['_ A'] = $ this;' schreiben, dann können Sie es in 'B' mit' $ GLOBALS abrufen ['_A'] -> var'. – Federkun