试图弄清楚为什么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 中也是如此。