2012-10-29 7 views
15

Im PHP Constructors and Destructors documentation heißt esWerden Elternkonstruktoren aufgerufen, wenn eine Kindklasse keinen Konstruktor definiert?

Hinweis: Eltern Konstrukteuren nicht implizit, wenn das Kind Klasse einen Konstruktor definiert aufgerufen werden. Um einen übergeordneten Konstruktor auszuführen, ist ein Aufruf von parent :: __ construct() innerhalb des Kindkonstruktors erforderlich.

Was aber, wenn die Kindklasse keinen Konstruktor aufruft, wird der Elternkonstruktor noch aufgerufen? Oder sollten wir einen Konstruktor erstellen, der den übergeordneten Konstruktor trotzdem aufruft?

IE:

class BaseClass { 
    function __construct() { 
     print "In BaseClass constructor\n"; 
    } 
} 

class SubClass extends BaseClass { 
    function __construct() { 
     parent::__construct(); 
    } 
} 

Antwort

14

Vielleicht war diese Art von Hand, aber haben einige schaut sich um, und eine direkte Antwort auf diese Frage war überraschend nicht ganz einfach so hier zu finden ist:

Wenn Die Kindklasse tut NOT Definieren Sie einen Konstruktor, dann wird der Elternkonstruktor aufgerufen.

Im folgenden Beispiel ruft $ obj den Konstruktor immer noch von BaseClass ab, weil SubClass nie einen Konstruktor aufgerufen hat.

+1

Vielleicht [das Handbuch] (http://www.php.net/manual/en/language.oop5.decon.php) wurde in jüngerer Zeit aktualisiert, aber es heißt, "Wenn das Kind nicht definiert Konstruktor kann dann wie eine normale Klassenmethode von der Elternklasse geerbt werden (wenn sie nicht als privat deklariert wurde). " – MrWhite

+0

@ w3d Es war danke für das Update :). –

+0

Können Sie einen Konstruktor sogar als privat deklarieren? Das scheint den Zweck zu besiegen, überhaupt eine Klasse zu haben. – eggmatters

6

Ein Konstruktor ist eine Methode, die wie jede andere Methode überschrieben werden kann. Wenn die Elternklasse einen Konstruktor hat, erben alle seine untergeordneten Klassen diesen Konstruktor. Wenn ein untergeordnetes Element den Konstruktor überschreibt, wird dies beim Erstellen neuer Objekte verwendet, und der Konstruktor des übergeordneten Elements wird nicht implizit aufgerufen. Wenn der untergeordnete Konstruktor den Konstruktor nicht überschreibt, wird der Konstruktor des übergeordneten Elements verwendet. Dieses Konzept gilt für die Mehrfachvererbung.

Verwandte Themen