2009-09-19 8 views
3

J'ai utilisé la POO en PHP depuis un moment maintenant, mais pour une raison quelconque, j'ai une fusion totale du cerveau et je n'arrive pas à comprendre ce qui ne va pas ici!Transmettre la variable à la classe PHP étendue

J'ai beaucoup plus classe complexe, mais écrit une plus simple de le tester, et même ce ne fonctionne pas ...

Quelqu'un peut-il me dire ce que je fais mal? Tout ce que j'essaie de faire est de passer une variable de la classe parente à la classe enfant! Je jure dans le passé que je viens d'utiliser $ this-> varName pour obtenir $ varName dans l'extension ??

Merci!

Répondre

15

Vous devez appeler le constructeur de la classe parente à partir du constructeur de la classe enfant.

Ce qui signifie que, dans votre cas, que votre classe test2 deviendra alors:

class test2 extends test 
{ 
    function __construct() 
    { 
     parent::__construct(); 
     echo $this->testvar; 
    } 
} 

Pour plus d'informations, vous pouvez jeter un oeil à la page Constructors and Destructors du manuel, qui indique, au sujet de votre question:

note: constructeurs de parents ne sont pas appelé implicitement si la classe enfant définit un constructeur. Pour exécuter un constructeur parent, un appel à parent::__construct() dans le constructeur enfant est requis.


Vous pouvez utiliser $this->varName: ce n'est pas un problème; considérer ce code:

class test { 
    public $testvar = 2; 
    function __construct() { 
     $this->testvar = 1; 
    } 
} 
class test2 extends test { 
    function __construct() { 
     var_dump($this->testvar); 
    } 
} 
$test2 = new test2; 

La sortie est:

int 2 

Quelle est la valeur "par défaut" de $testvar.

Cela signifie que le problème n'est pas que vous ne pouvez pas accéder à cette propriété: le problème, ici, est que le constructeur de la classe parente n'a pas été appelé.

+0

+1 pour plus de détails. :) – Amber

+0

Génial! Ça a marché! Merci! – Matt

+0

@Matt: de rien :-) ;; @Dav: merci! –

2

Votre classe test2 devrait appeler

parent::__construct() 

dans son constructeur.

+0

Merci! J'aimerais pouvoir ajouter ceci comme réponse acceptée aussi! – Matt

Questions connexes