¿Cómo puedo acceder a una propiedad de objeto nombrada como variable en php?


101

Una API de Google codificada en JSON devolvió un objeto como este

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

¿Alguien sabe cómo puedo acceder al $tvalor?

$object->$t obviamente regresa

Aviso: Variable no definida: ten / usr / local / ...

Error fatal: no se puede acceder a la propiedad vacía en / ....

Respuestas:


219

Dado que el nombre de su propiedad es la cadena '$t', puede acceder a ella así:

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

Alternativamente, puede poner el nombre de la propiedad en una variable y usarla así:

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

Puede ver ambos en acción en repl.it: https://repl.it/@jrunning/SpiritedTroubledWorkspace


1
¿Qué pasa si simplemente se usa "echo $ object -> $ property_name" sin las comillas? Parece estar funcionando, pero ¿es solo para las versiones más nuevas de php?
Lamy

3
@Larry En el caso del OP, las comillas son necesarias porque $t es el nombre de la propiedad, no una variable que contiene el nombre de la propiedad.
Jordan Running

2
Cuatro años después me di cuenta de que leí mal el comentario de @Lamy. Tienes toda la razón, Lamy. Si el valor de $property_namees la cadena, '$t'entonces echo $object->$property_namefunciona bien. Actualicé mi respuesta. Gracias y disculpas.
Jordan Running


13

La respuesta correcta (también para PHP7) es:

$obj->{$field}

5

Estoy usando php7 y lo siguiente funciona bien para mí:

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

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

0

esto funciona en php 5 y 7

$props=get_object_vars($object);
echo $props[$t];
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.