Accéder à l'attribut d'un objet contenant un tiret.

Discret
Invité n'ayant pas de compte PHPfrance

31 déc. 2005, 22:12

Bonjour à tous.

Je dois utiliser une classe que je ne peux pas modifier.

Un attribut public de cette classe est: titre-page
La commande $objet->titre-page ne fonctionne pas.

Pour accéder à l'attribut je dois faire comme ceci:

$titrepage = "titre-page";
echo $objet->$titrepage;

mais ce n'est pas une méthode très pratique ni propre.

J'ai essayé de faire:

echo $objet->"titre-page";
ou
echo $objet->'titre-page';
ou
echo $objet->(titre-page);

mais cela génére une erreur.

Existe-t-il une syntaxe pour accéder à cet élément sans utiliser une variable contenant le nom de l'attribut ?

Merci de votre aide.

ViPHP
ViPHP | 656 Messages

01 janv. 2006, 00:01

Essay de mettre dans un tableau.
Par exemple ce genre de choses:

... = array("titre-page" => "valeur");

$objet->variable["titre-page"]

Mais bon c'est normal d'avoir une erreur car le - vaut le signe "moins" et non pas un tiret texte.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

01 janv. 2006, 13:18

ça m'étonne beaucoup que personne ne l'ai vu avant toi parce que c'est hors syntaxe officielle pour les variables qui ne doivent contenir que des caractères alpha et des _

Sinon, essaye
echo $objet->{titre-page};
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 14 Messages

01 janv. 2006, 13:23

Lu,

Je rejoins zeus, c'est un problème de conception. Mais comment PHP ne peut-il pas t'envoyer un gros message d'erreur au niveau de la déclaration de la propriété?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

01 janv. 2006, 13:28

Je me suis dit la même chose mais je viens de me dire (malgrès les 2gr qui me restent dans le sang) que c'est peut être le ERROR_REPORTING qui n'affiche pas les warning ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 656 Messages

01 janv. 2006, 13:34

Dans ce cas, en début de fichier, placer:
error_reporting(E_ALL);

Discret
Invité n'ayant pas de compte PHPfrance

01 janv. 2006, 20:28

En fait, la classe n'a pas été écrite dans un fichier php. J'ai modifié l'exemple ici pour simplifier le problème.

Il s'agit d'une classe simplexml chargé depuis un fichier xml dont certaines balises contiennent un tiret dans leur nom.

Melfith
Invité n'ayant pas de compte PHPfrance

12 sept. 2007, 15:43

Salut,

Je suis tombé sur le même problème de syntaxe. J'ai beaucoup galéré mais j'ai trouvé la solution :D

Le sujet date, ms je met quand même la solution, ca pourrait aider quelques uns.

Pour accéder à l'attribut d'un objet contenant un tiret

Il suffit de faire echo $objet->{'titre-page'};

Et s'il existe plusieurs attributs :

echo $objet->{'titre-page'}[0]->{'sous-titre-page'};

Voila en espérant avoir aider les désespérés!!

Enjoy it!!