Page 1 sur 1

Appel fonction d'une classe à partir d'une autre classe

Posté : 04 avr. 2007, 14:52
par JFGore
Bonjour

j'ai un fichier index.php, j'instancie une classe X dans laquelle se trouve une fonction qui instancie une autre classe Y. Quand j'instancie la classe X ca marche, ensuite quand j'apelle la fonction qui instancie la classe Y ca se passe bien, juste après avoir instancié je teste le type (gettype) cela me retourne objet. Par contre dans mon index.php lorsque j'apelle une fonction de la classe Y, j'ai un message d'erreur me disant que ce n'est pas un objet

Fatal error: Call to a member function get_nom_rubrique() on a non-object in /homepages/index.php on line 19

merci de votre aide
j'espere avoir ete claire

JFG

Posté : 04 avr. 2007, 14:54
par zeus
Donne nous le code concerné de la classe X.

J'ai l'idée que tu essayes de faire $X->methode() alors qu'il faudrait faire $X->Y->methode()

Posté : 04 avr. 2007, 15:24
par Invité
index.php :

Code : Tout sélectionner

<?php function __autoload($classe) { $fichier = "$classe.php"; require_once($fichier); } $annu = new annu(); $annu->set_nom_annu('XXX'); $annu->ajout_rub('YYY'); echo $rubr->get_nom_rub().'<br>'; //apelle de la classe Y ?>
Classe X :

Code : Tout sélectionner

<?php class annu { public function set_nom_annu($nom) { $this->nom_annu = $nom; } public function ajout_rub($nom) { $rub = new rub($nom); } ?>
Classe Y :

Code : Tout sélectionner

<?php class rub { public function get_nom_rub() { return $this->nom_rub; } ?>

Posté : 04 avr. 2007, 15:36
par zeus
Dans ton fichier index.php, je vois la ligne
echo $rubr->get_nom_rub().'<br>'; //apelle de la classe Y 
mais aucune instanciation ...

$rub n'existe que dans la classe X ... et toi, tu essayes d'y accéder depuis l'extérieur de la classe ;)

Il faut que tu fasses une méthode dans ta classe X qui permette d'utiliser $rub

Posté : 04 avr. 2007, 16:12
par Invité
faute de frappe :

echo $rub->get_nom_rub().'<br>'; //apelle de la classe Y

juste avant g apellé la fonction annu->ajout_rub('YYY');

cette fonction instancie rub

Posté : 04 avr. 2007, 16:16
par JFGore
En fais quand on instancie une classe dans une classe elle n'est accessible que dans celle-ci ?

Posté : 04 avr. 2007, 17:13
par pascaltje
ta variable $rub est locale, et accessible uniquement depuis la méthode.

une variante :
class annu {

   public function set_nom_annu($nom) {
      $this->nom_annu = $nom;
   }

   public function ajout_rub($nom) {
      $this->rub = new rub($nom);
   }
puis :

echo $annu->rub->get_nom_rub();

Posté : 04 avr. 2007, 17:15
par zeus
Ce n'est pas parce que tu instancies $rub DANS la classe X que tu peut accéder à cette variable dans le code qui instancie la classe X : c'est ce qu'on appelle la portée des variables.

Posté : 04 avr. 2007, 20:10
par JFGore
Merci beacoup pour ton aide

les classes sont vues comme des variables pour PHP5 si j'ai bien compris

JFG

Posté : 13 avr. 2007, 15:24
par rakizm
pour remédier à ton blèm tu peux aussi inclure dans le fichier de la classe appelante le fichier de la classe appelée
ça donne:
include_once("rub.php");
class annu {

   public function set_nom_annu($nom) {
      $this->nom_annu = $nom;
   }

   public function ajout_rub($nom) {
      $rub = new rub($nom);
   }

et comme ça tu peux juste instancier "annu" sans t'occuper de "rub"