Angenommen genannt hat nenne ich die übergeordnete Klasse meiner Unterklasse mit parent::__construct();
.Wie kann ich, ob die übergeordnete Klasse erkennen ist durch eine Unterklasse in der übergeordneten Klasseerkennen, ob eine Unterklasse eine übergeordnete Klasse
Antwort
ich nicht genannt wissen, ob ich Ihre Frage verstanden, aber mein Vorschlag ist, eine statische Variable zu setzen, die dann verwenden get_called_class
in der Geordnete Klasse und testen Sie dann die oben genannten statischen variablen true
, in meinem Fall $CHILD
, in der Kinderklasse ist.
class Base {
public function __construct() {
$child = get_called_class();
if($child::$CHILD)
{
echo "Parent has being called";
}
}
}
class Child extends Base {
public static $CHILD = true;
public function __constructor()
{
parent::__constructor();
}
}
$child = new Child();
Ein anderer Ansatz wäre debug_backtrace zu verwenden, wie @icecub
vorgeschlagenDies beantwortet die Frage, aber es ist ziemlich grimmig Code/Design. Basisklassen sollten sich nicht damit beschäftigen, ob, wie oder wie sie erweitert werden. Bist du sicher, dass du diese Übung ermutigen willst? Ein besserer Ansatz wäre gewesen, mehr aus dem OP herauszuholen, damit wir verstehen, warum sie denken, dass sie diese Anforderung haben. Abschwächung auf dieser Basis. –
Warum oder was die Person, die fragt, mit der Antwort zu tun hat, geht mich nichts an, und sollte es auch nicht sein. Dies ist Q & A-Forum, nicht Tuturial-Site. Übrigens, die Person, die fragt, scheint für mich kein Neuling zu sein. Das nächste Mal nur die Frage beantworten und dann einen Rat geben. @AdamCameron – KBJ
Keine Notwendigkeit, snippy Kerl zu bekommen. Ich denke, der OP-Def * ist * ein OO-Geselle, wenn sie eine so umrahmte Frage stellen. Vielleicht nicht, aber so scheint es bei der Frage zu sein. Manchmal - * oft * sogar - wenn jemand eine Frage stellt, stellen sie nicht die Frage, die sie stellen wollen, und es bedarf einiger Anstrengung, dies herauszukitzeln. Letztendlich sind wir hier um * Menschen * zu helfen, nicht nur blind "Fragen zu beantworten, weil es eine Frage-und-Antwort-Site ist", und ihnen zu helfen bedeutet manchmal ein bisschen hin und her. –
- 1. eine übergeordnete Klasse Java Casting
- 2. Mocking Unterklasse-Objekt und übergeordnete Klasse Referenz
- 3. Wann garantiert eine Klasse eine Unterklasse?
- 4. Wie kann man feststellen, ob eine Klasse eine Unterklasse einer anderen Klasse ist?
- 5. Testen, ob eine Ruby-Klasse eine Unterklasse einer anderen Klasse ist
- 6. Testen, ob eine Klasse eine Unterklasse einer anderen Klasse in Lisp ist
- 7. Überprüfen Sie, ob eine Klasse eine Unterklasse einer anderen Klasse in Java ist
- 8. Übergeordnete dict in der Unterklasse
- 9. Erkennen, ob eine Zeichenfolge eine Tabelle enthält
- 10. Erkennen, ob eine Zeichenfolge eine URL ist
- 11. Übergeordnete virtuelle Methoden, wenn eine Klasse instanziieren
- 12. Wie Unterklasse eine Klasse in ObjectiveC korrekt?
- 13. AS3 - Kann ich wissen, ob eine Klasse eine Schnittstelle implementiert (oder eine Unterklasse einer anderen Klasse ist)?
- 14. Überprüfen Sie, ob ein Objekt eine Instanz einer Klasse ist (aber nicht eine Instanz seiner Unterklasse)
- 15. Wie überprüft man, ob eine Unterklasse zur Laufzeit eine Instanz einer Klasse ist?
- 16. Wie eine übergeordnete Klasse Methode aus einer geschachtelten Klasse zuzugreifen?
- 17. Erkennen, ob eine Oracle-Datenbank installiert ist
- 18. Erkennen, ob eine Fusionstabelle gerade Zeilen importiert
- 19. Erkennen, ob eine Regexp exponentiell ist
- 20. Erkennen, ob TextView eine Zeile umschließt
- 21. Android WebView - erkennen, ob eine JS-Funktion
- 22. Erkennen, ob eine URL ein Dateidownload ist
- 23. Erkennen, ob eine andere Browserregisterkarte redeRecognition verwendet
- 24. Javascript: Erkennen, ob eine Zeichenfolge getrimmt ist
- 25. SQLite: Erkennen, ob eine Rowid existiert
- 26. Erkennen, ob eine App deinstalliert wurde
- 27. Erkennen, ob eine Variable leer ist
- 28. Wie "erben" eine Methode, wenn die Klasse bereits eine übergeordnete Klasse
- 29. Ermitteln, ob Typ eine Unterklasse eines generischen Typs ist
- 30. Erkennen, ob eine Flask-App eine URL verarbeitet
ein 'privaten static' Variable nur aus der Konstruktor der" Mutter zugegriffen? Es wird nicht zugegriffen oder überschrieben, da es 'privat' ist. –
Ich denke, dass Sie sich [debug_backtrace] (http://php.net/debug_backtrace) ansehen möchten. Afaik ist die einzige Möglichkeit zu erkennen, woher ein Funktions/Methoden-Aufruf kommt. – icecub
Es kann hilfreich sein, wenn Sie erklären, warum Sie dies tun müssen. Ohne Erklärung klingt das ein bisschen so, als ob deine Modellierung ein bisschen daneben wäre, aber du bist sicher, dass es einen guten Grund gibt. –