Aller au contenu

Reference qui ne fonctionne pas


Sujets conseillés

Posté

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

Posté

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

Posté

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

Posté (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é par dièse
Posté
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 #^@%^%#^& :wacko:

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

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

En tout cas merci pour vos reponses.

Lolo

Posté (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é par dièse

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...