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"