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

时间:2010-11-12 10:40:42

标签: php json

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

echo $foo->{'bar'};

在这种情况下,$ foo是从PHP的json_decode()函数返回的对象,但在访问任何对象的公共成员时它都能正常工作。

我试图找出为什么使用这种语法而不是更常见的语法:

echo $foo->bar;

与第二个示例相比,使用第一个示例中的语法访问类成员是否提供了一些特殊内容?

3 个答案:

答案 0 :(得分:4)

当您想要将函数名称引用为字符串时,花括号语法很有用:

print $foo->{'aMemberFunc'}();

当您希望访问成员的名称由另一个函数(或变量)提供时。

这里getVarName()返回一个字符串,可用于引用$ foo对象内的成员。

print $foo->{getVarName()};

如果没有大括号,它将是$foo->getVarName(),它会尝试运行该方法......使用大括号,它会有一个完全不同的含义。

据我所知,

echo $foo->{'bar'};echo $foo->bar;完全相同。

答案 1 :(得分:1)

第一种语法允许您使用“ - ”访问属性,通常在JSON中使用。

答案 2 :(得分:0)

好处是您可以拥有不符合命名成员变量规则的变量名称。

这似乎是一个坏主意,通常它是有用的但它有用处。例如,如果您正在编写一个应用程序,该应用程序允许其用户添加具有人类可读名称的任意字段,但仍可访问插件等。