2009-10-11 12 views
0

J'ai actuellement deux classes, une appelée Dog, une appelée Caniche. Maintenant, comment puis-je utiliser une variable définie dans Dog de la classe Caniche. Mon code est le suivant:Accès aux variables parentes dans la méthode enfant

class dog { 
     protected static $name = ''; 

     function __construct($name) { 
      $this->name = $name 
     } 
    } 

    class Poodle extends dog { 
     function __construct($name) { 
      parent::__construct($name) 
     } 

     function getName(){ 
      return parent::$name; 
     } 
    } 

$poodle = new Poodle("Benjy"); 
print $poodle->getName(); 

Je reçois cette erreur

Avis: Undefined variable: Nom

+0

n'avez-vous pas besoin d'hériter? – palindrom

+0

Oooops désolé les gars, j'ai raté ce petit bout de mon code quand je l'ai posté ici. il ne fonctionne toujours pas avec s'étend dans – Matt

Répondre

2

Le problème est dans votre constructeur Dog. Vous avez écrit:

$this->name = $name; 

Mais en utilisant $this implique que name est une variable exemple, alors qu'en fait, il est une variable statique . Changez-le en:

self::$name = $name; 

Cela devrait fonctionner correctement.

+0

+1, vous avez raison. –

+0

Cependant, cela n'a pas beaucoup de sens d'avoir toutes les instances (héritées) de chien d'avoir le même nom, donc statique n'a pas beaucoup de sens ici. –

0

Dans votre classe de chien vous avez déclaré la variable $ nom comme statique, vous devez déclarer la variable sans le mot statique

class dog { 
    protected $name = ''; 

    function __construct($name) { 
     $this->name = $name 
    } 
} 



class Poodle extends dog { 
    function __construct($name) { 
     parent::__construct($name) 
    } 

    function getName(){ 
     return $this->name; 
    } 
} 

$poodle = new Poodle("Benjy"); 
print $poodle->getName(); 
5

je suppose que « nom » est un attribut du chien de béton, il ne devrait donc pas être statique en premier lieu. Pour accéder aux attributs de classe parent non statiques à partir d'une classe héritée, utilisez simplement "$ this".

class dog { 
     protected $name = ''; 

     function __construct($name) { 
      $this->name = $name; 
     } 
    } 

    class Poodle extends dog { 
     function getName(){ 
      return $this->name; 
     } 
    } 
Questions connexes