我在PHP脚本中偶然发现了一个有趣的语法:
echo $foo->{'bar'};
在这种情况下,$ foo是从PHP的json_decode()函数返回的对象,但在访问任何对象的公共成员时它都能正常工作。
我试图找出为什么使用这种语法而不是更常见的语法:
echo $foo->bar;
与第二个示例相比,使用第一个示例中的语法访问类成员是否提供了一些特殊内容?
答案 0 :(得分:4)
当您想要将函数名称引用为字符串时,花括号语法很有用:
print $foo->{'aMemberFunc'}();
当您希望访问成员的名称由另一个函数(或变量)提供时。
这里getVarName()
返回一个字符串,可用于引用$ foo对象内的成员。
print $foo->{getVarName()};
如果没有大括号,它将是$foo->getVarName()
,它会尝试运行该方法......使用大括号,它会有一个完全不同的含义。
echo $foo->{'bar'};
和echo $foo->bar;
完全相同。
答案 1 :(得分:1)
第一种语法允许您使用“ - ”访问属性,通常在JSON中使用。
答案 2 :(得分:0)
好处是您可以拥有不符合命名成员变量规则的变量名称。
这似乎是一个坏主意,通常它是有用的但它有用处。例如,如果您正在编写一个应用程序,该应用程序允许其用户添加具有人类可读名称的任意字段,但仍可访问插件等。