Ari*_*ona 5 php functional-programming
这个例子来自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
Run Code Online (Sandbox Code Playgroud)
有什么目的return function()?
我刚刚写了这个,它做了同样的事情.
array_filter($input, function($input) use ($min) {
return $input > $min;
}); // items > 3
Run Code Online (Sandbox Code Playgroud)
即使我将此回调指定给函数,也不需要辅助函数.
我是否忽视了某些内容,或者它有不同的目的?
criteria_greater_than返回你想要返回的值是绝对必要的。例如。对于返回值 5 的函数:
function get_5() {
return 5;
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用它$var = get_5();,但如果您将其设置为常量,您只需执行$var = 5;orcall_my_function(5)即可。请注意,您需要使用return来返回函数中的任何内容。现在考虑这个函数:
function get_fx($x)
{
return function () use ($x)
{
return $x;
};
}
$v5 = get_fx(5);
$v6 = get_fx(6);
Run Code Online (Sandbox Code Playgroud)
$v5和是什么$v6?它们是函数,因为这就是它们返回的内容。事实上$v5() == get_5()是正确的,但是 $6() == get_5() 是错误的,因为get_fx根据传递的参数返回不同的函数(闭包)。
如果您要跳过第一个函数,return您将不会从第一个函数中得到任何东西......例如。$v5 和 $v6 不会分配任何内容。如果您跳过返回函数中的第二个,return它们在调用时将不会返回任何内容,即。$v5()不会返回 5 也$v6()不会返回 6。