Wie kann ich auf eine Objekteigenschaft zugreifen, die in PHP als Variable benannt ist?

101

In JSON codierte Google-APIs haben ein solches Objekt zurückgegeben

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

Weiß jemand, wie ich auf den $tWert zugreifen kann?

$object->$t kehrt offensichtlich zurück

Hinweis: Undefinierte Variable: tin / usr / local / ...

Schwerwiegender Fehler: Zugriff auf leere Eigenschaft in / .... nicht möglich.

Flavio Copes
quelle

Antworten:

219

Da der Name Ihrer Eigenschaft die Zeichenfolge ist '$t', können Sie wie folgt darauf zugreifen:

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

Alternativ können Sie den Namen der Eigenschaft in eine Variable einfügen und wie folgt verwenden:

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

Sie können beide in Aktion auf repl.it sehen: https://repl.it/@jrunning/SpiritedTroubledWorkspace

Jordan läuft
quelle
1
Was ist, wenn einfach "echo $ object -> $ property_name" ohne Anführungszeichen verwendet wird? Scheint zu funktionieren, aber ist es nur für neuere PHP-Versionen?
Lamy
3
@ Larry Im Fall des OP werden die Anführungszeichen benötigt, da $t es sich um den Namen der Eigenschaft handelt, nicht um eine Variable, die den Namen der Eigenschaft enthält.
Jordan läuft
2
Vier Jahre später habe ich festgestellt, dass ich den Kommentar von @Lamy falsch verstanden habe. Du hast genau recht, Lamy. Wenn der Wert von $property_namedie Zeichenfolge '$t'ist, echo $object->$property_namefunktioniert dies einwandfrei. Ich habe meine Antwort aktualisiert. Danke und Entschuldigung!
Jordan läuft
19

Hast du es versucht:

$t = '$t'; // Single quotes are important.
$object->$t;
Macha
quelle
1
Dokumentiertes Verhalten: php.net/manual/en/language.variables.variable.php Es gibt einige wichtige Hinweise, lesen Sie es;)
jave.web
13

Die richtige Antwort (auch für PHP7) lautet:

$obj->{$field}
Vacilando
quelle
5

Ich benutze PHP7 und das Folgende funktioniert gut für mich:

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

$attr = 'name';
print $u->$attr;
omarjebari
quelle
0

Dies funktioniert auf PHP 5 und 7

$props=get_object_vars($object);
echo $props[$t];
YakovGdl35
quelle