Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1240 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  PHP5, acces aux classes parentes...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP5, acces aux classes parentes...

n°1466727
the_bigboo
Posté le 29-10-2006 à 02:54:58  profilanswer
 

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:

mood
Publicité
Posté le 29-10-2006 à 02:54:58  profilanswer
 

n°1466755
c0wb0y
:d
Posté le 29-10-2006 à 09:30:07  profilanswer
 

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.

n°1466762
FlorentG
Unité de Masse
Posté le 29-10-2006 à 09:48:03  profilanswer
 

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

n°1466766
the_bigboo
Posté le 29-10-2006 à 09:50:20  profilanswer
 

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
n°1466816
leflos5
On est ou on est pas :)
Posté le 29-10-2006 à 12:13:01  profilanswer
 

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

n°1466818
FlorentG
Unité de Masse
Posté le 29-10-2006 à 12:23:21  profilanswer
 

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à :??:

n°1466826
the_bigboo
Posté le 29-10-2006 à 12:38:14  profilanswer
 

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
n°1466827
FlorentG
Unité de Masse
Posté le 29-10-2006 à 12:41:06  profilanswer
 

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
n°1466828
the_bigboo
Posté le 29-10-2006 à 12:43:04  profilanswer
 

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

n°1466829
FlorentG
Unité de Masse
Posté le 29-10-2006 à 12:45:05  profilanswer
 

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...

mood
Publicité
Posté le 29-10-2006 à 12:45:05  profilanswer
 

n°1466847
the_bigboo
Posté le 29-10-2006 à 13:27:40  profilanswer
 

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::

n°1466857
FlorentG
Unité de Masse
Posté le 29-10-2006 à 13:39:06  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  PHP5, acces aux classes parentes...

 

Sujets relatifs
"Violation d'acces lors de l'ecriture"php5 et DOMDocument
PHP5accès le plus rapide à une disquette?
[PHP5;MySQL4.1] probleme utilisation avec IEClasses imbriquées [résolu]
Manipulation d'objets en PHP5Installation ssh2 sous php5
Interdire l'accès a un dossier sauf a un scriptlibération de mémoire & organisation hiérarchique de classes
Plus de sujets relatifs à : PHP5, acces aux classes parentes...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR