PHP 闭包需要传递参数


PHP closures require arguments passed

试图弄清楚为什么php匿名函数只有在函数头中被赋予参数时才有效。

例如

$f = function(){
    echo "hello world";
};
$f;
$f();

行不通。 但

$f = function($argument){
    echo $argument;
}
$f('hello world');

工作得很好。

为什么它需要参数,是否有任何解决方法?

编辑

这一定是版本问题。 我在 5.3.18 上,我的第一个示例肯定不起作用。 对于那些不相信的人,它抛出:

Parse error: syntax error, unexpected T_FUNCTION in index.php(192) : 
  eval()'d code on line 1

编辑

看完DaveRandom的回答后,我又回到了不知道发生了什么。 也就是说,如果他们是正确的,它可以在 5.3.10 中工作......

这是

完全有效的语法,输出hello world

$f = function(){
    echo "hello world";
};
$f();

该行$f;不执行任何操作,等效于声明任何其他变量,然后写入该新变量名称和分号。

匿名函数不需要参数,有关它们的更多详细信息,请参阅手册。

收到这些语法错误是因为您运行的是 PHP 版本 <5.3。

这不会调用闭包:

$f;

但这个确实:

$f();

函数调用要求解析器识别括号。如果你只提到变量$f;那么这是一个空表达式。$f中包含的闭包对象被分配给临时 zval(可变占位符),然后被丢弃。

如果删除无意义的$f;行,则第一个代码工作正常。

编辑 实际上,即使您保留该行,它仍然有效。在 5.3.10 中也是如此。