调用闭包时出现奇怪的行为

4
我想知道为什么这个不起作用:(PHP致命错误:调用未定义的方法stdClass::y())
$x=new stdClass;
$x->y=function(){return 'hi';};
echo $x->y();

但是这个有效:
$x=new stdClass;
$x->y=function(){return 'hi';};
$y=$x->y;
echo $y();

echo ($x->y)();也会返回Parse error: syntax error, unexpected '(', expecting ',' or ';'无效。那么,如何在没有中间变量的情况下正确调用y闭包属性呢?


o.O 这是一些下一级别扭曲的用法。 - Andrew
替代方案:call_user_func($x->y) - deceze
1个回答

4
因为在PHP中,一个类可以有函数和属性,而函数和属性可能具有相同的名称。
因此,当您调用以下内容时:
$x->y();

PHP将在$x上查找名为y的函数,并调用它。而实际上你有的是一个属性(它持有一个函数/闭包)。

这与Javascript不同,Javascript中函数和属性在同一命名空间中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接