質問

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

このコールバックを関数に任命したとしても、二次関数は不要に見えます。

私は何かを見落としていましたか、それとも別の目的を持っていますか?

役に立ちましたか?

解決

絶対に必要です 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()は偽です。 get_fx 渡された引数に応じて、異なる関数(閉鎖)を返します。

あなたが最初をスキップするなら return 最初の関数から何も得られないでしょう。 $ v5と$ v6には何も割り当てられていません。 2番目をスキップした場合 return 返された関数では、彼らは呼び出されたときに何も返さないだろう、すなわち。 $v5() 5と戻りません $v6() 6を返しません。

他のヒント

の2番目のパラマリ array_filtercallback. 。内部で指定できます array_filter なので anonymous function または、関数の名前を指定します。の中に anonymous function フィルタリングを行います。それが理由です return 使用済み。 2番目の返品は、匿名関数をでコールバックとして使用することです array_filter この関数の参照を返します。

2番目の関数を使用すると、callbackにarray_filterに渡すだけでなく、コールバックとろ過コンテキスト($ min)を一度に渡すことができます。コードを再利用するための説得力のある方法です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top