试图找出为什么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 ...
中有效答案 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。