Jak mogę uzyskać dostęp do właściwości obiektu nazwanej jako zmienna w php?

103

Interfejsy API Google zakodowane w formacie JSON zwróciły taki obiekt jak ten

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

Czy ktoś wie, jak mogę uzyskać dostęp do $twartości?

$object->$t oczywiście wraca

Uwaga: niezdefiniowana zmienna: tw / usr / local / ...

Błąd krytyczny: nie można uzyskać dostępu do pustej właściwości w / ....

Flavio Copes
źródło

Odpowiedzi:

222

Ponieważ nazwą Twojej właściwości jest ciąg '$t', możesz uzyskać do niej dostęp w następujący sposób:

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

Alternatywnie możesz umieścić nazwę właściwości w zmiennej i używać jej w następujący sposób:

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

Możesz zobaczyć oba w akcji na repl.it: https://repl.it/@jrunning/SpiritedTroubledWorkspace

Jordan Running
źródło
1
A co jeśli po prostu "echo $ object -> $ property_name" zostanie użyte bez cudzysłowów. Wydaje się, że działa, ale czy jest to tylko dla nowszych wersji php?
Lamy
3
@Larry W przypadku OP cudzysłowy są potrzebne, ponieważ $t jest nazwą właściwości, a nie zmienną zawierającą nazwę właściwości.
Jordan Running
2
Cztery lata później zdałem sobie sprawę, że źle odczytałem komentarz @Lamy. Masz rację, Lamy. Jeśli wartość $property_namejest ciągiem '$t'wtedy echo $object->$property_namedziała dobrze. Zaktualizowałem odpowiedź. Dzięki i przeprosiny!
Jordan Bieganie
Dzień dobry. Mógłbym użyć tej odpowiedzi, ale tylko z podwójnymi cudzysłowami, @JordanRunning - czy na pewno ma rację w przypadku pojedynczych cudzysłowów?
Valter Ekholm
Działa tylko bez cudzysłowów Używam php 7
steve moretz
14

Prawidłowa odpowiedź (również dla PHP7) to:

$obj->{$field}
Vacilando
źródło
5

Używam php7 i działa dla mnie dobrze:

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

$attr = 'name';
print $u->$attr;
omarjebari
źródło
0

działa to na php 5 i 7

$props=get_object_vars($object);
echo $props[$t];
YakovGdl35
źródło