2012-04-13 2 views
1

J'essaie d'avoir une idée de l'utilisation de la POO avec PHP, et je suis un peu perplexe avec certaines choses de l'héritage de classe.Définition des variables de classe PHP

Voici quelques cours simples que j'utilise pour essayer d'apprendre comment ils fonctionnent. Je veux simplement définir une variable dans la classe appelante (parent) à partir d'une classe enfant. A partir des exemples que je l'ai lu, il semble que cela devrait fonctionner, mais la sous-classe ne fixe pas la variable parent:

class test { 
    private $myvar; 
    private $temp; 

    function __construct(){ 
     $this->myvar = 'yo!'; 
     $temp = new test2(); 
     $temp->tester(); 
     echo $this->myvar; 
    } 

    public function setVar($in){ 
     $this->myvar = $in; 
    } 

} 

class test2 extends test{ 
    function __construct(){ 

    } 

    public function tester(){ 
     parent::setVar('yoyo!'); 
    } 

} 


$inst = new test(); // expecting 'yoyo!' but returning 'yo!' 

Merci pour toute aide.

+3

On dirait que vous êtes très confus avec l'héritage et la POO. Ce n'est pas du tout comment ça fonctionne. – NullUserException

+0

très est un euphémisme. J'essaie de penser à une métaphore sur le code julio pour lui permettre de comprendre où il se trompe. Travail en cours ... –

Répondre

6

Il semble que vous soyez très confus avec l'héritage et la POO. Ce n'est pas du tout comment ça fonctionne.

Je veux simplement définir une variable dans la classe appelante (parent) à partir d'une classe enfant.

Ceci n'est pas possible, pour plusieurs raisons. Tout d'abord, lorsque vous utilisez new, il crée une nouvelle instance de la classe. Chaque instance est indépendante l'une de l'autre, dans le sens où leurs propriétés ne seront pas liées ensemble.

De même, lorsque vous avez une classe enfant, hérite des propriétés et méthodes du parent. Mais lorsque vous créez une instance, c'est une instance de la classe enfant - pas la classe parente. Je ne fais pas ce que tu veux accomplir là-bas.

parent::setVar('yoyo!');

La bonne chose sur l'héritage est que vous obtenez les méthodes du parent par défaut, à moins que vous les remplaciez dans la classe des enfants. Puisque vous ne faites pas cela, il n'est pas nécessaire d'utiliser parent::setVar(), il suffit de faire $this->setvar().

+0

@ NullUserException-- merci d'avoir pris le temps de répondre clairement. Je pense que je comprends. Cependant, si par exemple la classe 'test2' n'élargissait pas la classe 'test', mais était encore instanciée depuis 'test' - comment accéder/modifier les variables 'test' class 'à partir de' test2 '? Est-ce possible? – julio

+0

@julio Il est possible que vous ayez besoin de l'instance 'test2' pour avoir une référence à l'instance' test' qui l'instancie. – NullUserException

5

Eh bien, avec

$temp = new test2(); 

vous créez une nouvelle instance de cette classe. Ils ne sont plus liés.

L'héritage influence uniquement une instance individuelle d'une hiérarchie de classes.

Questions connexes