Come posso accedere a una proprietà di un oggetto denominata come variabile in php?


101

Un'API di Google codificata in JSON ha restituito un oggetto come questo

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

Qualcuno sa come posso accedere al $tvalore?

$object->$t ovviamente ritorna

Avviso: variabile non definita: tin / usr / local / ...

Errore irreversibile: impossibile accedere a una proprietà vuota in / ....

Risposte:


219

Poiché il nome della tua proprietà è la stringa '$t', puoi accedervi in ​​questo modo:

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

In alternativa, puoi inserire il nome della proprietà in una variabile e usarla in questo modo:

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

Puoi vederli entrambi in azione su repl.it: https://repl.it/@jrunning/SpiritedTroubledWorkspace


1
E se si usasse semplicemente "echo $ object -> $ property_name" senza virgolette. Sembra funzionare, ma è solo per le versioni più recenti di php?
Lamy

3
@ Larry Nel caso dell'OP le virgolette sono necessarie perché $t è il nome della proprietà, non una variabile contenente il nome della proprietà.
Jordan Running il

2
Quattro anni dopo mi sono reso conto di aver letto male il commento di @Lamy. Hai esattamente ragione, Lamy. Se il valore di $property_nameè la stringa, '$t'allora echo $object->$property_namefunziona bene. Ho aggiornato la mia risposta. Grazie e scuse!
Jordan Running


13

La risposta corretta (anche per PHP7) è:

$obj->{$field}

5

Sto usando php7 e quanto segue funziona bene per me:

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

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

0

funziona su php 5 e 7

$props=get_object_vars($object);
echo $props[$t];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.