PHP闭包需要传递参数

时间:2012-06-22 00:21:25

标签: php closures

试图找出为什么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 ...

中有效

3 个答案:

答案 0 :(得分:5)

这是perfectly valid语法并输出hello world

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

$f;什么都不做,等同于声明任何其他变量,然后写出新的变量名和分号。

匿名函数不需要参数,有关它们的详细信息,请参阅the manual

您收到这些语法错误,因为you are running a PHP version < 5.3

答案 1 :(得分:4)

这不会调用闭包:

$f;

但是这个确实:

$f();

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

答案 2 :(得分:3)

第一个代码works fine,如果您删除无意义的$f;行。

编辑实际上,即使您将该行留在了still works,它也会5.3.10