2013-05-09 15 views
5

Ich wurde mit dem Namen der Elternklasse wie Konstruktor versucht und funktioniert teilweise für mich.Aufruf Eltern Konstruktor automatisch nach Kinder PHP

Erste Anrufe

"Darthvader Methode"

wie Konstruktor aber nie

"Luke Skywalker Konstruktor" zu

nennen ..

jemand weiß, wie man TU es?

Beispiel:

Darth.php

class DarthVader{ 
    public function DarthVader(){ 
     echo "-- Obi-Wan never told you what happened to your father.\n"; 
    } 
    public function reponse(){ 
     echo "-- No. I am your father\n"; 
    } 
} 

Luke.php

include("Darth.php") 

class LukeSkywalker extends DarthVader{ 
public function __constructor(){ 
     echo "- He told me enough! He told me you killed him!\n" 
     $this->response(); 
    } 
} 

Erwartetes Ergebnis:

  • Obi-Wan dir nie erzählt, was mit deinem Vater passiert ist.

  • Er hat mir genug gesagt! Er hat mir gesagt, dass du ihn getötet hast!

  • Nein, ich bin dein Vater

ich es wirklich möchte so automatisch.

+2

Hey jetzt - Spoiler! : D – andrewsi

+0

Ich fand den Grund, warum "luke skywalker constructor" nicht lief. Einfach. ist "__construc", nicht "__constructor", Dies unterstützt @Marc B 's Theorie. Danke Jungs – iLevi

Antwort

20

Gemäß der Dokumentation: http://php.net/manual/en/language.oop5.decon.php

Hinweis: Parent Bauer sind nicht wird implizit aufgerufen, wenn die Kindklasse einen Konstruktor definiert. Um einen übergeordneten Konstruktor auszuführen, ist ein Aufruf von parent :: __ construct() innerhalb des Kindkonstruktors erforderlich. Wenn das Kind keinen Konstruktor definiert, kann es wie eine normale Klassenmethode von der Elternklasse geerbt werden (wenn es nicht als privat deklariert wurde).

2

Standardmäßig werden übergeordnete Konstruktoren niemals automatisch aufgerufen (sofern sie nicht in den untergeordneten Klassen definiert sind). Auch in Java müssen Sie sie explizit aufrufen und es muss die erste Anweisung sein.

Beachten Sie, dass in PHP der Name der Konstruktorfunktion __construct lautet und es sich um eine magische Methode handelt, da sie aufgerufen wird, wenn ein Objekt erstellt wird.

class LukeSkywalker extends DarthVader{ 
    public function __construct(){ //See the name of magic method. It is __construct 
    parent::__construct(); //Call parents constructor 
    echo "- He told me enough! He told me you killed him!\n" 
    $this->response(); 
    } 
} 

den oben stehenden Code verwenden und Sie das gewünschte Ergebnis jedes Mal, wenn Sie ausführen erhalten:

new LukeSkywalker();

+8

Außer, dass sie standardmäßig automatisch aufgerufen werden, wenn sie im Kind definiert sind. – Frug

Verwandte Themen