我正在处理一个现有的代码库并找回一个带有以数字开头的属性的对象,如果我在该对象上调用print_r
,我可以看到该对象。
我们说它是$Beeblebrox->2ndhead
。当我尝试这样访问它时,我收到一个错误:
解析错误:语法错误,意外T_LNUMBER,期待T_STRING或T_VARIABLE或'{'或'$'
我如何获得该属性?
答案 0 :(得分:37)
这个怎么样:
$Beeblebrox->{'2ndhead'}
实际上,你可以为任何类型的变量执行此操作 - 即使是非类属性的变量。
例如,您可以考虑包含空格的变量名称;以下语法将起作用:
${"My test var"} = 10;
echo ${"My test var"};
显然,即使你不能做这样的事情:
$My test var = 10;
echo $My test var;
不知道它是如何在内部工作的......但经过一些搜索后,我在PHP手册中找不到任何相关内容。
我只能找到关于{}
和变量的内容:Variable parsing - 但与当前主题不太相关......
但是这篇文章展示了其他一些可能性,并且比我在这里发布的例子更远:PHP Variable Names: Curly Brace Madness
这是另一个提供关于解析方式的额外信息:PHP grammar notes
答案 1 :(得分:5)
在我问这个问题之前,我确实找到了同事的答案,但是在Google上找不到它,所以我想在这里发帖,以防其他人遇到同样的问题。
我可以像这样访问该属性:
$Beeblebrox->{'2ndhead'}
拥有以数字开头的属性或变量并不合法,但不知何故,像这样的动态引用使其成为可能。对我来说,这似乎是一种奇怪的语言漏洞。
答案 2 :(得分:0)
您也可以执行以下操作:
$aux = '2ndhead';
$Beeblebrox->$aux;