如何访问在 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 中命名为变量的对象属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中返回对象属性的访问修饰符级别?

PHP面向对象编程

如果初始属性是变量,如何访问 JSON 对象的属性的属性?

如何使用变量访问对象属性[重复]

php静态方法

php 面向对象-封装和继承