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.

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


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


13

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

$obj->{$field}

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;

0

Dies funktioniert auf PHP 5 und 7

$props=get_object_vars($object);
echo $props[$t];
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.