此示例取自phptherightway的函数式编程页面。
<?php
/**
* Creates an anonymous filter function accepting items > $min
*
* Returns a single filter out of a family of "greater than n" filters
*/
function criteria_greater_than($min)
{
return function($item) use ($min) {
return $item > $min;
};
}
$input = array(1, 2, 3, 4, 5, 6);
// Use array_filter on a input with a selected filter function
$output = array_filter($input, criteria_greater_than(3));
print_r($output); // items > 3
拥有return function()
的目的是什么?
我刚刚写了这个并且它做了同样的事情。
array_filter($input, function($input) use ($min) {
return $input > $min;
}); // items > 3
即使我将此回调指定给函数,也不需要辅助函数。
我是否忽视了某些内容,或者它有不同的目的?
答案 0 :(得分:2)
criteria_greater_than
绝对有必要返回您想要返回的值。例如。对于函数返回值5:
function get_5() {
return 5;
}
您可以像$var = get_5();
一样使用它,但如果您将其设置为常量,则只需执行$var = 5;
或call_my_function(5)
。请注意,您需要使用return
才能返回函数中的任何内容。现在考虑这个功能:
function get_fx($x)
{
return function () use ($x)
{
return $x;
};
}
$v5 = get_fx(5);
$v6 = get_fx(6);
什么是$v5
和$v6
?嗯,它们是功能,因为这就是他们返回的内容。实际上$v5() == get_5()
是正确的,但$ 6()== get_5()是false,因为get_fx
返回不同的函数(闭包),这取决于传递的参数。
如果您要跳过第一个return
,您将无法从第一个函数中获得任何内容。例如。 $ v5和$ v6不会分配任何内容。如果您在返回的函数中跳过第二个return
,则在调用时它们不会返回任何内容,即。 $v5()
不会返回5而$v6()
不会返回6.
答案 1 :(得分:0)
array_filter
的第二个参数是callback
。您可以在array_filter
中将其指定为anonymous function
或指定函数的名称。在anonymous function
内部进行过滤,这就是return
使用的原因。第二个返回是使用匿名函数作为array_filter
的回调,它返回此函数的引用。
答案 2 :(得分:0)
第二个函数允许您不仅将回调传递给array_filter,还允许一次传递回调和过滤上下文($ min)。这是重用代码的便捷方式。