Php 调用闭包时的奇怪行为
我想知道为什么这不起作用:(Php 调用闭包时的奇怪行为,php,closures,Php,Closures,我想知道为什么这不起作用:(PHP致命错误:调用未定义的方法stdClass::y()) 但这是可行的: $x=new stdClass; $x->y=function(){return 'hi';}; $y=$x->y; echo $y(); echo($x->y)()还返回解析错误:语法错误,意外的“(”,预期的“,”或“;”无效。那么,在没有中间变量的情况下调用y闭包属性的正确方法是什么呢。因为在PHP中,类可以具有函数和属性,并且函数和属性可以具有相同的名称 所以当你打电话
PHP致命错误:调用未定义的方法stdClass::y()
)
但这是可行的:
$x=new stdClass;
$x->y=function(){return 'hi';};
$y=$x->y;
echo $y();
echo($x->y)()
还返回解析错误:语法错误,意外的“(”,预期的“,”或“;”
无效。那么,在没有中间变量的情况下调用y
闭包属性的正确方法是什么呢。因为在PHP中,类可以具有函数和属性,并且函数和属性可以具有相同的名称
所以当你打电话时:
$x->y();
PHP将在$x
上查找名为y
的函数,然后调用它。取而代之的是一个属性(包含函数/闭包)
这与javascript不同,javascript中的函数和属性都在同一个“名称空间”中。o.o这是下一级扭曲的用法替代:
call\u user\u func($x->y)
。
$x->y();