Php'de değişken olarak adlandırılan bir nesne özelliğine nasıl erişebilirim?


105

JSON ile kodlanmış bir Google API'leri şuna benzer bir nesne döndürdü

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

Değere nasıl erişebileceğimi bilen var $tmı?

$object->$t belli ki geri dönüyor

Uyarı: Tanımsız değişken: t/ usr / local / ... içinde

Önemli hata: / .... içindeki boş mülke erişilemiyor.

Yanıtlar:


224

Mülkünüzün adı dize olduğundan '$t', ona şu şekilde erişebilirsiniz:

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

Alternatif olarak, mülkün adını bir değişkene koyabilir ve şu şekilde kullanabilirsiniz:

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

Bunların ikisini de repl.it üzerinde eylem halinde görebilirsiniz: https://repl.it/@jrunning/SpiritedTroubledWorkspace


1
Ya sadece "echo $ object -> $ property_name" tırnak işaretleri olmadan kullanılırsa? Çalışıyor gibi görünüyor, ancak sadece daha yeni php sürümleri için mi?
Yasen

3
@Larry OP durumunda, mülkün adını içeren bir değişken değil, mülkün adı $t olduğu için tırnak işaretleri gereklidir .
Jordan Running

2
Dört yıl sonra @Lamy yorumunu yanlış okuduğumu fark ettim. Kesinlikle haklısın Lamy. Değeri $property_namedizge ise, '$t'o zaman echo $object->$property_nameiyi çalışır. Cevabımı güncelledim. Teşekkürler ve özür dilerim!
Jordan Koşu

Merhaba. Bu yanıtı kullanabilirdim, ancak yalnızca çift tırnak işaretleri ile, @JordanRunning - tek tırnakla doğru olduğundan emin misiniz?
Valter Ekholm

Sadece alıntılar olmadan çalışıyor php 7 kullanıyorum
steve moretz


15

Doğru cevap (ayrıca PHP7 için):

$obj->{$field}

Ya değişken, özellik adının yalnızca bir parçasıysa? $obj->{"$field".'_id'}Örneğin böyle bir şey yapmanın bir yolu var mı ?
twistedpixel

Bunun kesinlikle mümkün olduğunu keşfettim $obj->{"{$field}".'id'}. Korkunç görünüyor ama% 100 işe yarıyor.
twistedpixel

5

Php7 kullanıyorum ve aşağıdakiler benim için iyi çalışıyor:

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

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

0

bu php 5 ve 7'de çalışır

$props=get_object_vars($object);
echo $props[$t];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.