Works:返回[false,null]
array_filter([1, 2, 3, false, null], function($value) {
return empty($value);
});
不起作用:
array_filter([1, 2, 3, false, null], empty); // syntax error, unexpected ')',expecting '('
为什么我不能将函数作为参数传递?
答案 0 :(得分:2)
在你的第二个例子中,什么是空的?
请注意,php""空"不是一个函数,而是一个语言结构。因此,您无法将其用作函数。这在文档中进行了解释:http://php.net/manual/en/function.empty.php(向下滚动到" Notes"部分......)
这解释了为什么第一个变体确实有效,而第二个变体导致语法错误。
答案 1 :(得分:2)
函数可以传递给任何带有callable
参数的函数/方法。但是,empty(),尽管它是如何用代码编写的,但它不是一个函数。它是一种语言结构。
如果要将空传递为可调用对象,则别无选择,只能将其包装在用户定义的函数中。
$func = function ($param) { return empty ($param); };
print_r (array_filter ([1,2, NULL, 3, 4, FALSE, 5, 6, 0, "", 7, 8, 9], $func));
或
print_r array_filter (([1,2, NULL, 3, 4, FALSE, 5, 6, 0, "", 7, 8, 9], function ($param) {
return empty ($param);
}));
其他语言结构也受到影响,因此您可能需要查阅手册以获取语言结构列表(所有以(和)函数终止的语言结构都是您不能使用的函数。可调用的参数)。
答案 2 :(得分:1)