Ich habe eine Elternklasse und mehrere Kinder, die davon erben.Wie verschachtelte Objekterstellung zu verfolgen ist
Einige Kinder werden andere Kinder in sich anrufen. Aber sie werden nicht immer verschachtelt genannt.
class Parent { }
class Child extends Parent {
public function run() {
// Kid nested inside Child. Do not open DB transaction
$a = (new Kid())->run();
}
}
class Kid extends Parent {
public function run() {
// @todo Open DB transaction if not nested
}
}
// Kid not nested. Open DB transaction
(new Kid())->run();
Gibt es eine effiziente Möglichkeit für das Kid
Objekt zu wissen (ohne von mir manuell erzählt wird), ob er innerhalb oder außerhalb von Child
instanziiert wurde?
automatisch? Wahrscheinlich nicht. Vielleicht, wenn Sie erklären, was Sie erreichen wollen, könnten wir auf andere Weise helfen ... – FirstOne
@FirstOne Ich möchte, dass die Top-Level-Kindklasse eine DB-Transaktion innerhalb ihrer 'run'-Methode öffnet und schließt. Aber wie Sie in einigen Fällen sehen können, ist 'Kid' auf der obersten Ebene und in anderen Fällen ist es nicht – andrewtweber
Nun, Sie könnten etwas mit [$ GLOBALS] versuchen (http://php.net/manual/en/reserved). Variablen.globals.php). Wenn das äußere Kind wirklich aus allem heraus ist, kannst du versuchen, es zu vergleichen, um zu sehen, ob das, was du hast, dasselbe ist wie das, was du von Globalen erhalten hast, das draußen erschaffen wurde. ** Bearbeiten: ** Beachten Sie, dass es sich nicht darum handelt, die Variable als global festzulegen. Es geht darum zu überprüfen, ob die Variable da ist ... – FirstOne