Comment puis-je accéder à une propriété d'objet nommée comme variable dans PHP?


102

Une API Google encodée en JSON a renvoyé un objet tel que celui-ci

[updated] => stdClass Object
(
 [$t] => 2010-08-18T19:17:42.026Z
)

Tout le monde sait comment puis-je accéder à la $tvaleur?

$object->$t retourne évidemment

Remarque: Variable non définie: tdans / usr / local / ...

Erreur fatale: impossible d'accéder à la propriété vide dans / ....

Réponses:


221

Puisque le nom de votre propriété est la chaîne '$t', vous pouvez y accéder comme ceci:

echo $object->{'$t'};

Alternativement, vous pouvez mettre le nom de la propriété dans une variable et l'utiliser comme ceci:

$property_name = '$t';
echo $object->$property_name;

Vous pouvez voir les deux en action sur repl.it: https://repl.it/@jrunning/SpiritedTroubledWorkspace


1
Et si simplement "echo $ object -> $ property_name" est utilisé sans les guillemets. Cela semble fonctionner, mais est-ce uniquement pour les nouvelles versions de php?
Lamy

3
@Larry Dans le cas de l'OP, les guillemets sont nécessaires car $t c'est le nom de la propriété, pas une variable contenant le nom de la propriété.
Jordan Running

2
Quatre ans plus tard, j'ai réalisé que j'avais mal lu le commentaire de @Lamy. Vous avez parfaitement raison, Lamy. Si la valeur $property_nameest la chaîne '$t'puis echo $object->$property_namefonctionne très bien. J'ai mis à jour ma réponse. Merci et excuses!
Jordan Running le

Bonjour. Je pourrais utiliser cette réponse, mais uniquement avec des guillemets doubles, @JordanRunning - êtes-vous sûr que c'est vrai avec des guillemets simples?
Valter Ekholm

Cela ne fonctionne que sans guillemets J'utilise php 7
steve moretz il y a


14

La bonne réponse (également pour PHP7) est:

$obj->{$field}

5

J'utilise php7 et ce qui suit fonctionne très bien pour moi:

class User {
    public $name = 'john';
}
$u = new User();

$attr = 'name';
print $u->$attr;

0

cela fonctionne sur php 5 et 7

$props=get_object_vars($object);
echo $props[$t];
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.