Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 调用闭包时的奇怪行为_Php_Closures - Fatal编程技术网

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();