PHP5, acces aux classes parentes...

PHP5, acces aux classes parentes... - PHP - Programmation

Marsh Posté le 29-10-2006 à 02:54:58    

Salut :)
J'ai créé trois class class1, class2, et class3 . Je les instancie comme suit :

Code :
  1. <?php
  2. // Librairies
  3. include('class2.php');
  4. include('class3.php');
  5. // Objets
  6. class class1 extends class2 {
  7. private obj3 ;
  8. private function _appel()
  9. {
  10.     $this->obj3 = new class3();
  11.     $this->obj3->GoToParent();
  12. }
  13. ?>


Le but est de pouvoir accéder a une méthode déclarée dans class1 , qui est héritée de class2 depuis une méthode de class3.
Une idée de comment procéder ?
 
Merci :jap:

Reply

Marsh Posté le 29-10-2006 à 02:54:58   

Reply

Marsh Posté le 29-10-2006 à 09:30:07    

Code :
  1. parent::__construct();


 
Je me sers de ça pour acceder au constructeur de ma classe parente. J'ai jamais testé pour acceder à d'autres méthodes en fait.

Reply

Marsh Posté le 29-10-2006 à 09:48:03    

Ben y'a rien à faire, t'appelle la méthode de manière normalle :??:

Reply

Marsh Posté le 29-10-2006 à 09:50:20    

je vais situer le contexte :
class 1 est une class générale
class 2 est ma class de couche d'acces BDD
class 3 est une class secondaire
en instanciant ma class principale, j'instancie également ma couche d'acces BDD
l'une de ces méthode se trouvant dan mon objet BDD  gerant mes connexions, me permet d'executer mes requetes.
Mon objet 3 a besoin d'executer lui aussi des requetes et instancier un autre objet BDD serait bete alors qu'un existe deja...
 
parrent:: ne veux pas fonctionner chez moi pour cet usage...

Message cité 1 fois
Message édité par the_bigboo le 29-10-2006 à 09:52:35
Reply

Marsh Posté le 29-10-2006 à 12:13:01    

Une méthode statique pour mettre en oeuvre un singleton :??:

Reply

Marsh Posté le 29-10-2006 à 12:23:21    

the_bigboo a écrit :

je vais situer le contexte :
class 1 est une class générale
class 2 est ma class de couche d'acces BDD
class 3 est une class secondaire
en instanciant ma class principale, j'instancie également ma couche d'acces BDD
l'une de ces méthode se trouvant dan mon objet BDD  gerant mes connexions, me permet d'executer mes requetes.
Mon objet 3 a besoin d'executer lui aussi des requetes et instancier un autre objet BDD serait bete alors qu'un existe deja...
 
parrent:: ne veux pas fonctionner chez moi pour cet usage...


Mais pourquoi t'utilises par $this->pouet() de manière normalle ? Je pige pas là :??:

Reply

Marsh Posté le 29-10-2006 à 12:38:14    

Code :
  1. <?php
  2. // Librairies
  3. include('class2.php');
  4. include('class3.php');
  5. // Objets
  6. class 2 {
  7.     protected function pouet()
  8.     {
  9.    
  10.     }
  11. }
  12. class 3 {
  13.     public function GoToParent()
  14.     {
  15.          parent::pouet();
  16.     }
  17. }
  18. class class1 extends class2 {
  19. private obj3 ;
  20. private function _appel()
  21. {
  22.     $this->obj3 = new class3();
  23.     $this->obj3->GoToParent();
  24. }
  25. ?>


parce que la methode que je souhaite appelée est située dans class 2.
Dans ce que j'ai donné plus haut, c'est l'appel parent::pouet(); qui ne fonctionne pas.


Message édité par the_bigboo le 29-10-2006 à 12:42:19
Reply

Marsh Posté le 29-10-2006 à 12:41:06    

Okay, il faut que tu passes une instance de class1 dans ton obj3 si j'ai pigé [:dawak]
 

Code :
  1. class class3 {
  2.  
  3.   private $class1Instance;
  4.   public function __construct($class1Instance)
  5.   {
  6.      $this->class1Instance = $class1Instance;
  7.   }
  8.   public function pouet()
  9.   {
  10.     $this->class1Instance->pouet();
  11.   }
  12. }


 
Et donc  

Code :
  1. $this->obj3 = new class3($this);


Message édité par FlorentG le 29-10-2006 à 12:41:31
Reply

Marsh Posté le 29-10-2006 à 12:43:04    

okay.... Pourquoi parrent:: ne fonctionne t-il pas ??

Reply

Marsh Posté le 29-10-2006 à 12:45:05    

Parce que parent, c'est la class dont est héritée ta classe en cours. Pour class1, ça va être class2.
 
Class3 n'a strictement aucun moyen de savoir où il se trouve, et c'est logique, vu que plusieurs objets peuvent contenir un même autre...

Reply

Marsh Posté le 29-10-2006 à 12:45:05   

Reply

Marsh Posté le 29-10-2006 à 13:27:40    

je trouve pas ca tres logique, car pour class2, je peux acceder aux méthodes parentes par $this>method() de par l'héritage.
 
Dans ce cas je ne vois pas l'utilié de parent::

Reply

Marsh Posté le 29-10-2006 à 13:39:06    

Non c'est très logique. Imagine deux classes :

class pouet
{
  public $obj3;
}
 
class tagada
{
  public $obj3;
}


Si maintenant tu file la même instance :

$obj3 = new class3();
$tagada = new tagada();
$pouet = new pouet();
 
$tagada->obj3 = $obj3;
$pouet->obj3 = $obj3;


 
Selon ta logique, qui serait parent ? tagada ou pouet ? Parent ne peut être que la classe héritée, ce qui est parfaitement logique.
 
Ensuite, parent permet par exemple d'appeller la méthode parente si elle serait redéfinie :

class class1 {
  function pouet()
  {
     echo 'pouet';
  }
}
 
class class2 extends class1
{
  function pouet()
  {
     echo 'tagada';
   }
}


Si dans class2 tu veux appeller la pouet du parent, t'es bien obligé d'utiliser parent:: pouet(), sinon c'est tagada qui serait affiché


Message édité par FlorentG le 29-10-2006 à 13:39:53
Reply

Sujets relatifs:

Leave a Replay

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