0

试图弄清楚为什么 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 中工作......

4

3 回答 3

5

这是完全有效的语法和输出hello world

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

该行$f;什么也不做,相当于声明任何其他变量,然后写下新的变量名和分号。

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

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

于 2012-06-22T00:25:57.443 回答
4

这不会调用闭包:

$f;

但是这个可以:

$f();

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

于 2012-06-22T00:27:06.953 回答
3

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

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

于 2012-06-22T00:26:15.627 回答