在PHP中访问类变量的替代语法
我刚刚在PHP脚本中偶然发现了一个有趣的语法:在PHP中访问类变量的替代语法,php,json,Php,Json,我刚刚在PHP脚本中偶然发现了一个有趣的语法: echo $foo->{'bar'}; 在本例中,$foo是从PHP的json_decode函数返回的对象,但在访问任何对象的公共成员时,它都能正常工作 我试图找出为什么使用这种语法而不是更常见的语法: echo $foo->bar; 与第二个示例相比,使用第一个示例中的语法访问类成员有什么特殊之处吗?第一个语法允许您使用在JSON中常用的“-”访问属性。当您要将函数名作为字符串引用时,花括号语法非常有用: print $foo-&
echo $foo->{'bar'};
在本例中,$foo是从PHP的json_decode函数返回的对象,但在访问任何对象的公共成员时,它都能正常工作
我试图找出为什么使用这种语法而不是更常见的语法:
echo $foo->bar;
与第二个示例相比,使用第一个示例中的语法访问类成员有什么特殊之处吗?第一个语法允许您使用在JSON中常用的“-”访问属性。当您要将函数名作为字符串引用时,花括号语法非常有用:
print $foo->{'aMemberFunc'}();
当您想要访问由另一个函数或变量提供的成员时
这里getVarName返回一个字符串,该字符串可用于引用$foo对象内的成员
print $foo->{getVarName()};
如果没有花括号,它将是$foo->getVarName,它将尝试运行该方法。。。用花括号表示的意思完全不同
echo$foo->{'bar'};和echo$foo->bar;就我所知,它们是相同的。好处在于,您可以使用不符合命名成员变量规则的变量名称
这似乎是一个坏主意,通常是这样,但它有其用途。例如,如果您正在编写一个应用程序,允许其用户添加具有人类可读名称的任意字段,但仍然可以访问插件等。谢谢Luca。我接受你的回答,因为你提供了最详尽的解释。还要感谢dev null居住者指出了这个问题的JSON方面。