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