Como posso acessar uma propriedade de objeto nomeada como uma variável em php?


101

Uma API do Google codificada em JSON retornou um objeto como este

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

Alguém sabe como posso acessar o $tvalor?

$object->$t obviamente retorna

Aviso: Variável indefinida: tem / usr / local / ...

Erro fatal: não é possível acessar a propriedade vazia em / ....

Respostas:


219

Como o nome da sua propriedade é a string '$t', você pode acessá-la desta forma:

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

Como alternativa, você pode colocar o nome da propriedade em uma variável e usá-lo assim:

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

Você pode ver ambos em ação em repl.it: https://repl.it/@jrunning/SpiritedTroubledWorkspace


1
E se simplesmente "echo $ object -> $ property_name" for usado sem as aspas. Parece estar funcionando, mas é apenas para versões mais recentes do php?
Lamy

3
@Larry No caso do OP, as aspas são necessárias porque $t é o nome da propriedade, não uma variável que contém o nome da propriedade.
Jordan Running

2
Quatro anos depois, percebi que havia interpretado mal o comentário de @Lamy. Você está exatamente certo, Lamy. Se o valor de $property_namefor a string '$t', echo $object->$property_namefunciona bem. Eu atualizei minha resposta. Obrigado e desculpas!
Jordan Running


13

A resposta correta (também para PHP7) é:

$obj->{$field}

5

Estou usando php7 e o seguinte funciona bem para mim:

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

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

0

isso funciona em php 5 e 7

$props=get_object_vars($object);
echo $props[$t];
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.