如何访问在 php 中命名为变量的对象属性?
Posted
技术标签:
【中文标题】如何访问在 php 中命名为变量的对象属性?【英文标题】:How can I access an object property named as a variable in php? 【发布时间】:2011-03-31 18:14:59 【问题描述】:以 JSON 编码的 Google API 返回了一个像这样的对象
[updated] => stdClass Object
(
[$t] => 2010-08-18T19:17:42.026Z
)
有人知道我如何访问$t
值吗?
$object->$t
明显返回
注意:未定义变量:
t
in /usr/local/...致命错误:无法访问 /.... 中的空属性
【问题讨论】:
【参考方案1】:由于您的属性名称是字符串'$t'
,您可以这样访问它:
echo $object->'$t';
或者,您可以将属性的名称放在变量中并像这样使用它:
$property_name = '$t';
echo $object->$property_name;
您可以在 repl.it 上看到这两个操作:https://repl.it/@jrunning/SpiritedTroubledWorkspace
【讨论】:
如果只使用“echo $object->$property_name”而不使用引号会怎样。似乎可以工作,但它仅适用于较新的 php 版本吗? @Larry 在 OP 的情况下需要引号,因为$t
是属性的名称,而不是变量包含的名称财产。
四年后,我意识到我误读了@Lamy 的评论。你完全正确,拉米。如果$property_name
的值是字符串'$t'
,那么echo $object->$property_name
可以正常工作。我已经更新了我的答案。谢谢和道歉!
你好。我可以使用这个答案,但只能使用双引号,@JordanRunning - 你确定单引号是正确的吗?【参考方案2】:
正确答案(也适用于 PHP7)是:
$obj->$field
【讨论】:
如果变量只是属性名称的一部分怎么办?有没有办法做类似$obj->"$field".'_id'
之类的事情?
刚刚发现$obj->"$field".'id'
完全可以做到这一点。它看起来很可怕,但它 100% 有效。【参考方案3】:
你试过了吗:
$t = '$t'; // Single quotes are important.
$object->$t;
【讨论】:
记录在案的行为:php.net/manual/en/language.variables.variable.php 有一些重要说明,请阅读 ;)【参考方案4】:我正在使用 php7,以下对我来说很好:
class User
public $name = 'john';
$u = new User();
$attr = 'name';
print $u->$attr;
【讨论】:
【参考方案5】:这适用于 php 5 和 7
$props=get_object_vars($object);
echo $props[$t];
【讨论】:
以上是关于如何访问在 php 中命名为变量的对象属性?的主要内容,如果未能解决你的问题,请参考以下文章