destroyedlolo Posté 4 Septembre 2006 Posté 4 Septembre 2006 Bonjour, Je suis sur un gros projet avec des classes assez complexes, héritage et tout et tout ... mais j'ai le code suivant qui ne fonctionne pas : class act_chapitre extends chapitre { var $parent; function act_chapitre( $id, $p ){ parent::chapitre( $id ); $this->parent &= $p;echo 'Init :<pre>';var_dump($this->parent);var_dump($p);echo '</pre>'; }} En argument, $p est une autre classe. Mon probleme est que l'assignation ne fonctionne pas. Le var_dump() de $this->parent m'affiche int(0) alors que celui de $p me donne bien le resultat que j'attends. Je suis actuellement en PHP 4.4.2 mais je vais upgrade cette nuit en 4.4.4 sans trop d'espoir car je n'ai pas vu de reference a ce probleme. Qu'est-ce qui pourrait faire que cette assignation ne fonctionne pas ? Est-ce que quelqu'un a deja eu ce genre de problème ? A+ Lolo
beal2912 Posté 4 Septembre 2006 Posté 4 Septembre 2006 Si mes souvenirs sont bon, la programmation objet avec php n'est géré vraiment correctement qu'à partir de php 5. Tu écris : $this->parent &= $p; j'aurais écris : $this->parent = $p; l'opérateur &= éffectue un Et logique entre deux valeurs et stocke le résultat dans la variable. tout dépend de ce que tu veux vraiment faire
Dan Posté 4 Septembre 2006 Posté 4 Septembre 2006 Si je ne me trompe pas, une différence majeure entre php4 et php5 est justement le traitement de ta construction $this->parent &= $p; A mon avis, cette classe ne fonctionnerait qu'en php5 Dan <edit: grillé >
dièse Posté 4 Septembre 2006 Posté 4 Septembre 2006 (modifié) Avec PHP 5 les objets sont automatiquement passés par référence dans les paramètres d'une méthode. Avec PHP 4 il faut effectivement faire un appel explicite à la référence. Le code suivant devrait marcher sans problème : function act_chapitre($id, &$p ){$this->parent = $p;} Il faut évidement qu'il existe une instance de ta classe act_chapitre, tu ne peux pas utiliser $this lors d'appel static. Modifié 4 Septembre 2006 par dièse
destroyedlolo Posté 4 Septembre 2006 Auteur Posté 4 Septembre 2006 l'opérateur &= éffectue un Et logique entre deux valeurs et stocke le résultat dans la variable.tout dépend de ce que tu veux vraiment faire Gagner, c'etait ca En fait, ce que je voulais faire, c'etait creer une reference sur l'argument, et donc la syntaxe correcte est =& et non &= comme j'ai fait qui est bien le ET logique. Pfff, on perd du temps des fois pour des #^@%^%#^& En ce qui conserne PHP4/5, je suis malheureusement bloque pour le moment sur le 4 a cause des gens qui gere ma machine de prod Mais bon, les deux seuls choses qui me manquent vraiment sont les classes abstraites (ce que sait faire PHP5), mais surtout les heritages multiples malheureusement impossibles que ce soit en PHP4 ou en 5. Dommage car ca m'oblige a definir 36 fois les memes methodes En tout cas merci pour vos reponses. Lolo
dièse Posté 4 Septembre 2006 Posté 4 Septembre 2006 (modifié) Il y a peu de langages qui autorisent l'héritage multiple. Ce que tu fais avec ta variable $parent c'est une composition et ça vaut souvent mieux qu'un héritage pour lier 2 classes. Aucune raison de réécrire 36 fois la même méthode, même en PHP4. Bonne chance pour ton projet Modifié 4 Septembre 2006 par dièse
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant