2016-11-05 2 views
3

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

+0

ein 'privaten static' Variable nur aus der Konstruktor der" Mutter zugegriffen? Es wird nicht zugegriffen oder überschrieben, da es 'privat' ist. –

+0

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

+1

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. –

Antwort

-1

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

vorgeschlagen
+0

Dies 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. –

+0

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

+1

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. –

Verwandte Themen