php不能将函数作为参数传递


php cannot pass function as argument?

工作:返回〔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 '('

为什么我不能把函数作为一个参数传入?

在第二个示例中,什么是空?

注意php的"空"不是一个函数,而是一种语言构造。因此,您不能将其用作函数。文件中对此进行了解释:http://php.net/manual/en/function.empty.php(向下滚动至"备注"部分…)

这就解释了为什么第一种变体确实有效,而第二种变体会导致语法错误。

函数可以传递到任何接受callable参数的函数/方法中。然而,empty(),不管它是如何在代码中编写的,都不是一个函数。这是一种语言结构。

如果您想将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

empty()不是函数,它是一种语言构造。array_filter需要一个可调用的参数作为第二个参数。您需要使用一个包装器函数,就像您在第一个示例中使用的一样:

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