2013-05-09 11 views
5

Sono stato provato con il nome di costruttore genitore classe e funziona parzialmente per me.Chiamare il costruttore padre automaticamente dopo i bambini PHP

primi inviti a

"metodo DarthVader"

come costruttore, ma mai chiamata a

"Luke Skywalker costruttore" ..

qualcuno sa come fallo?

esempio:

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(); 
    } 
} 

Risultato atteso:

  • Obi-Wan non ti ha detto quello che è successo a tuo padre.

  • Mi ha detto abbastanza! Mi ha detto che l'hai ucciso!

  • No. Io sono tuo padre

mi piacerebbe davvero a modo, automaticamente.

+2

Ehi adesso - spoiler! : D – andrewsi

+0

Ho trovato il motivo per cui "luke skywalker constructor" non era in esecuzione. Semplicemente. è "__construc", non "__constructor", Questo supporta la teoria di @Marc B. Grazie ragazzi – iLevi

risposta

20

Come per la documentazione: http://php.net/manual/en/language.oop5.decon.php

Nota: costruttori Parent non sono chiamato implicitamente se la classe figlio definisce un costruttore. Per eseguire un costruttore genitore, è richiesta una chiamata a parent :: __ construct() all'interno del costruttore figlio. Se il figlio non definisce un costruttore, può essere ereditato dalla classe padre proprio come un normale metodo di classe (se non è stato dichiarato come privato).

2

Per impostazione predefinita, i costruttori parent sono mai chiamati automaticamente (a meno che non siano definiti nelle classi figlie). Anche in Java, devi chiamarli esplicitamente e deve essere la prima dichiarazione.

Nota che in PHP il nome della funzione di costruzione è __construct e si suppone che sia un metodo magico, poiché viene chiamato quando viene creato un oggetto.

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(); 
    } 
} 

utilizzare il codice di cui sopra e si otterrà il risultato desiderato ogni volta che si esegue:

new LukeSkywalker();

+8

Tranne che per impostazione predefinita vengono chiamati automaticamente A MENO CHE siano definiti nel bambino. – Frug

Problemi correlati