这里第二次返回功能的目的是什么?

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)

即使我将此回调指定给函数,也不需要辅助函数.

我是否忽视了某些内容,或者它有不同的目的?

Syl*_*ter 2

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。