Pblm héritage et méthode "sans" argument...

Pblm héritage et méthode "sans" argument... - PHP - Programmation

Marsh Posté le 12-11-2007 à 15:11:29    

Salut tlm !
 
Voilà, au cours d'un développement je suis tombé sur un petit problème...
 
J'ai une classe "mère" qui possède plusieurs méthodes (ainsi que son constructeur) avec un nombre d'arguments variables. Le problème est que lorsque ma classe "fille" hérite du constructeur et des méthodes de la classe "mère", rien ne marche...  
 
Un petit bout de code sera sans doute plus parlant :
 

Code :
  1. <?php
  2. class Mere
  3. {
  4.     protected $var = array();
  5.     public function getIt()
  6.     {
  7.         // récupère un tableau d'arguments passé à la méthode
  8.         $this->var = func_get_args();
  9.     }
  10.     public function cnt()
  11.     {
  12.         return count($this->var);
  13.     }
  14. }
  15. class Fille extends Mere
  16. {
  17.     public function getIt()
  18.     {
  19.         parent::getIt();  //    <-- Ne fonctionne pas !
  20.     }
  21.     public function cnt()
  22.     {
  23.         return parent::cnt();
  24.     }
  25. }
  26. $m = new Mere();
  27. $m->getIt("toto","titi","tata" );
  28. echo $m->cnt(); // affiche 3
  29. $f = new Fille();
  30. $f->getIt("toto","titi","tata" );
  31. echo $f->cnt(); // affiche 0 au lieu de 3 !!!
  32. ?>


 
Au final, je suis obligé de reproduire à l'identique le traitement effectué dans la méthode de la classe mère pour la méthode de la classe fille.
Ici, ça revient donc à remplacer "parent::getIt();" par "$this->var = func_get_args();".
 
J'aurai aimé savoir si quelqu'un était déjà tombé sur ce "pblm" et, si oui, comment il l'avait résolu.
 
Merci d'avance pour vos réponses,
Lionel.


Message édité par pot2yaourt le 12-11-2007 à 20:49:43
Reply

Marsh Posté le 12-11-2007 à 15:11:29   

Reply

Marsh Posté le 15-11-2007 à 18:03:46    

Suis-je vraiment le seul à qui est arrivé ce problème ?
Ou est-ce que c'est mon message qui n'est pas clair ?

Reply

Marsh Posté le 15-11-2007 à 19:09:20    

je suis pas expert en object mais j'ai fouillé un peu, c'est vrai que ton problème est surprenant. Ca etre la fonction  func_get_args() qui pose probleme.
Par contre si la question etait seulement rappeler la methode de la classe parent tu n'a pas à la redefinir (mais je suppose que tu souhaitait la rappeler pour la modifier)
 
ceci fonctionnerai tres bien par exemple
 

Code :
  1. <?php
  2. class Mere
  3. {
  4.     protected $var = array();
  5.     public function getIt()
  6.     {
  7.         // récupère un tableau d'arguments passé à la méthode
  8.         $this->var = func_get_args();
  9.     }
  10.     public function cnt()
  11.     {
  12.         return count($this->var);
  13.     }
  14. }
  15. class Fille extends Mere
  16. {
  17. }
  18. $m = new Mere();
  19. $m->getIt("toto","titi","tata" );
  20. echo $m->cnt(); // affiche 3
  21. $f = new Fille();
  22. $f->getIt("toto","titi","tata" );
  23. echo $f->cnt(); // affiche 0 au lieu de 3 !!!
  24. ?>


 
 
Sinon plutot que de passer une liste de valeur tu passe un tableau. j'ai essayé d'autre chose comme ceci qui peux te convenir :  

Code :
  1. <?php
  2. class Mere
  3. {
  4.     public $var ;//= array();
  5.     public function getIt($tmp)
  6.     {
  7.         $this->var=$tmp;
  8.     }
  9.     public function cnt()
  10.     {
  11.         return count($this->var);
  12.     }
  13. }
  14. class Fille extends Mere
  15. {
  16.     public function getIt($tmp)
  17.     {
  18.         parent::getIt($tmp);  //    <-- fonctionne !
  19.     }
  20.     public function cnt()
  21.     {
  22.         return parent::cnt();
  23.     }
  24. }
  25. $m = new Mere();
  26. $tab=array("toto","titi","tata" );
  27. $m->getIt($tab);
  28. echo $m->cnt(); // affiche 3
  29. echo "<br/>";
  30. $f = new Fille();
  31. $tab=array("toto","titi","tata" );
  32. $f->getIt($tab);
  33. echo $f->cnt(); // affiche 0 au lieu de 3 !!!
  34. ?>


 
 


---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Sujets relatifs:

Leave a Replay

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