Afficher la variable local d'une fonction dans une classe fille

Afficher la variable local d'une fonction dans une classe fille - PHP - Programmation

Marsh Posté le 19-12-2013 à 23:39:24    

Bonjour,
 
Je viens vous voir car j'ai un problème, pourtant simple, devant lequel je sèche.
Je suis débutant en php et tente d'utiliser de l'héritage.  
Un exemple de ce que je veux faire valant toutes les descriptions :
 
abstract class Class1 {
...
   public function Class1(){
   ...
   $this->insert();
   ...
   }
   public abstract function insert();
...
}
class Class2 extends Class1{
private $varibable;
 
    public function Class2(){
       $this->variable = "toto";
   }
 
   public function insert(){
      echo 'variable ='.$this->variable;  
   }
}
 
//$class2 = new Class2();
// Résultat obtenu :  
//variable =
 
-----------------
 
 
Voilà, j'ai écris ça a l'arrache donc merci de ne pas tenir compte des fautes de frappes :p
Le problème est donc : j'ai un classe abstraite avec une fonction abstraite. Dans la fonction implémentée de la classe fille je veux afficher une variable qui est locale a la classe fille, mais celle-ci est vide à l'entrée dans la fonction.
 
Je crois comprendre d'où vient le problème (que l'appel de insert est celui de la classe mère) mais je n'en suis pas sûr, et surtout je ne vois pas comment le résoudre sans modifier mon architecture.
 
Si quelqu'un peut m'éclairer je lui en serai très reconnaissant ;)
 
Désolé si c'est une question classique à laquelle vous avez répondu 1000 fois mais je sèche aussi sur les mots clés pour faire une recherche. Je n'ai rien trouvé après une heure.
 
Merci d'avance ;)
 
 
Edit : En mettant le "$this->insert();" dans le contructeur de la classe fille plutôt que celui de la classe mère cela fonctionne, donc c'est bien le problème que j'avais identifié, mais je ne comprends tout de même pas exactement pourquoi ça ne fonctionne pas et j'aimerais savoir s'il y a une solution autre.


Message édité par zerbus le 19-12-2013 à 23:45:19
Reply

Marsh Posté le 19-12-2013 à 23:39:24   

Reply

Marsh Posté le 20-12-2013 à 11:45:04    

Je vois les choses se passer comme ça : sur le new Class2(), le constructeur de Class1() est appelé. Celui-ci appelle la fonction insert() qui fait un echo de $variable qui, à ce stade, est vide car celle-ci n'est pas encore initialisée puisque le constructeur de Class2() n'a pas été encore appelé. Ensuite, le constructeur Class2() est appelé et initialise $variable avec "toto".
 
Du reste, si, après ton new, tu fais un $class2->insert(), je suis sûr que le echo va bien afficher le contenu de $variable...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-12-2013 à 19:55:48    

Mais oui bien sûr !
J'ai fais l'instanciation de mes variables après l'appel au constructeur parent.
Je suis parti sur une mauvaise piste et n'ai donc pas vu l'évidence.
 
Chapeau pour avoir trouvé alors que je n'ai pas mis l'appel au constructeur dans l'exemple.
 
Merci beaucoup

Reply

Marsh Posté le 21-12-2013 à 23:58:14    

l'appel au constructeur parent est implicite dans le cadre d'un héritage ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed