[POO] Une classe dans une classe

Résolu
Mrreivax Messages postés 100 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 26 juin 2010 - 8 déc. 2007 à 22:59
Mrreivax Messages postés 100 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 26 juin 2010 - 8 déc. 2007 à 23:49
Bonsoir.
Et bien voila. J'ai créé une classe de gestion des images.
J'ai par la suité créé une autre classe de gestion de banières.
Mais, cette dernière à besoin de la premiere classe.
Comment puis je la créer?
Je m'explique:

class imageliste {
...
}

class listing{
   var dummy = new imageliste(); //Ceci génère une erreur
}

Cela me retoune une erreur de type "parse error".
Pourquoi??
Et, comment pouvoir donc appeler ma 1er classe dans la seconde?

Merci d'avance!

Xavier

PS/ C'est en php4. Mais si vous avez la solution en php5, je suis preneur aussi!

5 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 déc. 2007 à 23:44
Ok. Ben tu mets ça dans le constructeur :

Syntaxe php4 :

class listing {

var $dummy;

function listing() {
$this -> dummy = new imagelist();
}

}



Syntaxe php5 :

classe listing {

private dummy;

public function __construct() {
$this -> dummy = new imagelist();
}
}
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 déc. 2007 à 23:33
Salut,

Une propriété d'une classe est identifiée de deux manières différentes, suivant le contexte où elle est utilisée :
- dans la classe : $this -> property;
- en dehors de la classe : $instance -> property;
Elle est définie d'une seule manière dans la classe :
- var $var = .....;

La valeur qu'on lui attribue lors de sa définition, la valeur par défaut, ne peut être qu'une valeur constante. Il ne peut donc pas s'agir du résultat d'une fonction, d'un nouvel objet, etc. Sinon, ça peut être un entier, une constante, une chaine, un tableau...

Si tu veux définir instancier une classe dans une autre classe lors de l'instanciation de cette dernière, il faut le faire dans le constructeur.
En php4, le constructeur est une fonction qui porte le même nom que la classe.
En php5, c'est une fonction qui s'appelle __construct() (avec deux underscores). La syntaxe php4 est cependant compatible.

Maintenant, pour revenir à ton problème, si tu souhaites que ta classe qui gère les bannières puisse avoir les mêmes méthodes et propriétés que la classe qui gère les images, il te suffit d'étendre la première classe :

class listing extends imagelist {

}

Les méthodes sont automatiquement héritées.
Tu peux les réécrire. En php4, elles peuvent toutes être réécrites. En php5, seules les méthodes qui n'ont pas été définies avec le mot clé final peuvent l'être.
En php4, toutes les méthodes sont publiques. En php5, on peut spécifier la visibilité d'une méthode (et d'une propriété) avec les mots clés public, protected et private. Jette un oeil à la doc.

Si tu réécris une méthode, tu peux toujours appeler la méthode de la classe qui est étendue (la classe parent) comme ceci :
parent::nom_de_la_methode($arguments);

Euh voilà en gros...
Mrreivax Messages postés 100 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 26 juin 2010 7
8 déc. 2007 à 23:40
Mon problème, c'est que je ne veux pas des methodes et fonctions de la 1er classe.
Par exemple, en visual basic, on peut définir à l'objet "TreeView" un autre objet "ImageList" par sa propriété "imagelist".
Pour autant, mon objet "TreeView" ne contiendra pas les proproétés & méthodes de mon "ImageList"; "TreeView" a simpelement une variable de type "ImageList".
Comment faire de même en php?

Sinon, merci pour ta réponse, j'y ai appris pas mal de truc

Xavier
Mrreivax Messages postés 100 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 26 juin 2010 7
8 déc. 2007 à 23:48
Génial!
Vraiment génial!
Merci beaucoup!!!!
Je vais pouvoir avancer dans mes traveau.
Merci encore neigedhiver pour ta précieuse aide

Xavier

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mrreivax Messages postés 100 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 26 juin 2010 7
8 déc. 2007 à 23:49
"travaux" pardon pour l'orthographe

Xavier
Rejoignez-nous