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 / ....

Flavio Copes
la source

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

Jordan Running
la source
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}
Vacilando
la source
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;
omarjebari
la source
0

cela fonctionne sur php 5 et 7

$props=get_object_vars($object);
echo $props[$t];
YakovGdl35
la source