ฉันจะเข้าถึงคุณสมบัติของวัตถุที่ชื่อเป็นตัวแปรใน php ได้อย่างไร


105

Google API ที่เข้ารหัสใน JSON ส่งคืนวัตถุเช่นนี้

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

ใครทราบว่าฉันจะเข้าถึง$tค่านี้ได้อย่างไร

$object->$t ผลตอบแทนที่ชัดเจน

หมายเหตุ: ตัวแปรที่ไม่ได้กำหนด: tใน / usr / local / ...

ข้อผิดพลาดร้ายแรง: ไม่สามารถเข้าถึงคุณสมบัติว่างใน / ....

คำตอบ:


224

เนื่องจากชื่อคุณสมบัติของคุณคือสตริง'$t'คุณจึงสามารถเข้าถึงได้ดังนี้:

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

หรือคุณสามารถใส่ชื่อของคุณสมบัติในตัวแปรและใช้มันดังนี้:

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

คุณสามารถดูทั้งสองอย่างนี้ได้ใน repl.it: https://repl.it/@jrunning/SpiritedTroubledWorkspace


1
จะเกิดอะไรขึ้นถ้าเพียงแค่ใช้ "echo $ object -> $ property_name" โดยไม่มีเครื่องหมายคำพูด ดูเหมือนจะใช้งานได้ แต่สำหรับ php เวอร์ชันใหม่เท่านั้นหรือไม่?
Yasen

3
@Larry ในกรณีของ OP จำเป็นต้องมีเครื่องหมายคำพูดเนื่องจาก$t เป็นชื่อของคุณสมบัติไม่ใช่ตัวแปรที่มีชื่อของคุณสมบัติ
Jordan Running

2
สี่ปีต่อมาฉันรู้ว่าฉันอ่านความคิดเห็นของ @Lamy ผิด คุณพูดถูกแล้ว Lamy หากค่าของ$property_nameเป็นสตริง'$t'ก็echo $object->$property_nameใช้ได้ดี ฉันได้อัปเดตคำตอบแล้ว ขอบคุณและขอโทษ!
Jordan Running

สวัสดี. ฉันสามารถใช้คำตอบนี้ได้ แต่ใช้กับอัญประกาศคู่ @JordanRunning คุณแน่ใจหรือไม่ว่าถูกต้องกับอัญประกาศเดี่ยว
Valter Ekholm

ใช้งานได้โดยไม่มีเครื่องหมายคำพูดฉันใช้ php 7
สตีฟมอเรตซ์


15

คำตอบที่ถูกต้อง (สำหรับ PHP7) คือ:

$obj->{$field}

จะเกิดอะไรขึ้นถ้าตัวแปรเป็นเพียงส่วนหนึ่งของชื่อคุณสมบัติ? มีวิธีทำเหมือน$obj->{"$field".'_id'}ตัวอย่างไหม?
Twistedpixel

$obj->{"{$field}".'id'}เพิ่งค้นพบนี้เป็นไปได้อย่างแน่นอนกับ มันดูแย่มาก แต่ใช้ได้ผล 100%
Twistedpixel


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.