如何访问以数字开头的对象属性?

2022-08-30 17:01:43

我正在处理一个现有的代码库,并取回了一个对象,该对象的属性以数字开头,如果我调用该对象,我可以看到它。print_r

假设它是.当我尝试像这样访问它时,我收到一个错误:$Beeblebrox->2ndhead

解析错误:语法错误、意外T_LNUMBER、预期T_STRING或T_VARIABLE或“{”或“$”

如何获取该属性?


答案 1

那这个呢:

$Beeblebrox->{'2ndhead'}


实际上,您几乎可以对任何类型的变量执行此操作 - 即使对于不是类属性的变量也是如此。

例如,您可以考虑包含空格的变量名称 ;以下语法将起作用:

${"My test var"} = 10;
echo ${"My test var"};

即使很明显,你也无法做这样的事情:

$My test var = 10;
echo $My test var;


不知道它的内部是如何工作的,但是...经过一番搜索,我在PHP手册中找不到任何有关此内容的信息。

我唯一能找到的关于变量和变量的东西在这里:变量解析 - 但与当前主题并不完全相关......{}


但是这里有一篇文章展示了其他一些可能性,并且比我在这里发布的示例更进一步:PHP变量名称:卷曲支撑疯狂

这是另一个,它提供了一些关于解析方式的补充信息 :PHP语法注释


答案 2

在我问这个问题之前,我实际上从一位同事那里找到了答案,但在Google上找不到它,所以我想把它贴在这里,以防其他人有同样的问题。

我可以像这样访问该属性:

$Beeblebrox->{'2ndhead'}

拥有以数字开头的属性或变量并不合法,但不知何故,像这样的动态引用使它成为可能。对我来说,这似乎是语言中的一个奇怪的漏洞。


推荐