php无法传递函数作为参数?

时间:2015-11-13 16:24:40

标签: php function

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 '('

为什么我不能将函数作为参数传递?

3 个答案:

答案 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); 
}));

其他语言结构也受到影响,因此您可能需要查阅手册以获取语言结构列表(所有以(和)函数终止的语言结构都是您不能使用的函数。可调用的参数)。

http://php.net/manual/en/reserved.keywords.php

答案 2 :(得分:1)

empty()不是函数,它是一种语言结构。 array_filter期望callable作为第二个参数。您将需要使用与第一个示例中完全相同的包装函数:

array_filter([1, 2, 3, false, null], function($value) {
   return empty($value);
});