2014-11-02 30 views
4

我在这个SO answer看到,可以使用大括号内的字符串调用PHP类方法,以便调用使用字符串

$player->SayHi(); 

可以是替代书面方式PHP大括号的语法为:

$player->{'SayHi'}(); 

我的问题是:

在PHP中调用的这种语法是什么?如果使用了与方法不对应的错误字符串,会发生什么情况?

另外,我可以使用这种语法来调用非类方法吗?

我查看了链接帖子中的答案,并且只有指向PHP回调语法的链接,它似乎没有涵盖大括号语法。

感谢,

+0

如果它不对应于某个方法,则会出现错误,就像使用正常语法时一样。 – Barmar 2014-11-02 06:06:34

+0

在PHP中,当你调用一个对象时,你可以访问刚刚通过大括号调用的对象的方法。 – 2014-11-02 06:08:11

回答

5

它的variable functions一部分。当使用变量变量或变量函数时,可以用任何表达式来替换变量,该表达式通过包装大括号来返回字符串。所以,你可以这样做:

$var = 'SayHi'; 
$player->$var(); 

,或者你可以用它做一个步骤:

$player->{'SayHi'}(); 

variable variables文档中显示大括号的语法。这个例子有一个变量类属性,但是类方法使用相同的语法。

+0

谢谢。你也可以解释一下这个花括号吗? (当使用字符串文字时)。 – tinlyx 2014-11-02 06:44:32

+0

就像我说过的,当值是表达式而不是变量时,使用花括号。所以如果你想连接变量,你可以做' - > {$ a。$ b}'。 – Barmar 2014-11-02 06:48:15

+0

我明白了。感谢您的解释。在这种情况下,是否有任何使用大括号括起表达式的PHP引用?对不起,新手问题。我以前没看过这个。 – tinlyx 2014-11-02 06:52:17

0

您可以在PHP manual

Basicly了解这一点:

function getVarName() 
{ return 'aMemberVar'; } 

print $foo->{getVarName()}; // prints "aMemberVar Member Variable" 

它的可变功能的一部分。