Page 1 sur 1

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

Posté : 31 déc. 2005, 22:12
par Discret
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.

Posté : 01 janv. 2006, 00:01
par Ultiny
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.

Posté : 01 janv. 2006, 13:18
par zeus
ç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};

Posté : 01 janv. 2006, 13:23
par solo
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é?

Posté : 01 janv. 2006, 13:28
par zeus
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 ...

Posté : 01 janv. 2006, 13:34
par Ultiny
Dans ce cas, en début de fichier, placer:
error_reporting(E_ALL);

Posté : 01 janv. 2006, 20:28
par Discret
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.

Posté : 12 sept. 2007, 15:43
par Melfith
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!!