Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中访问类变量的替代语法_Php_Json - Fatal编程技术网

在PHP中访问类变量的替代语法

在PHP中访问类变量的替代语法,php,json,Php,Json,我刚刚在PHP脚本中偶然发现了一个有趣的语法: echo $foo->{'bar'}; 在本例中,$foo是从PHP的json_decode函数返回的对象,但在访问任何对象的公共成员时,它都能正常工作 我试图找出为什么使用这种语法而不是更常见的语法: echo $foo->bar; 与第二个示例相比,使用第一个示例中的语法访问类成员有什么特殊之处吗?第一个语法允许您使用在JSON中常用的“-”访问属性。当您要将函数名作为字符串引用时,花括号语法非常有用: print $foo-&

我刚刚在PHP脚本中偶然发现了一个有趣的语法:

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方面。