Frage

Dieses Beispiel entnommen auf der funktionalen Programmierseite von PhpherIltway.

<?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

Was ist der Zweck zu haben? return function() ?

Ich habe das gerade geschrieben und es macht das Gleiche.

array_filter($input, function($input) use ($min) {
    return $input > $min;
}); // items > 3

Auch wenn ich diesen Rückruf zu einer Funktion ernenne, scheint die sekundäre Funktion unnötig.

Habe ich etwas übersehen oder hat es einen anderen Zweck?

War es hilfreich?

Lösung

Es ist absolut notwendig für criteria_greater_than Um den Wert zurückzugeben, den Sie zurückgeben möchten. Z.B. Damit eine Funktion den Wert 5 zurücksetzt:

function get_5() {
    return 5;
}

Du benutzt es wie wie $var = get_5();, aber wenn Sie es auf eine Konstante setzen würden, würden Sie es einfach tun $var = 5; oder call_my_function(5). Beachten Sie, dass Sie verwenden müssen return um alles in einer Funktion zurückzugeben. Betrachten Sie nun diese Funktion:

function get_fx($x)
{
    return function () use ($x)
           {
               return $x;
           };
}

$v5 = get_fx(5);
$v6 = get_fx(6);

Was sind $v5 und $v6? .. Nun, sie sind Funktionen, denn das kehrten sie zurück. In der Tat $v5() == get_5() ist wahr, aber $ 6 () == get_5 () ist falsch, weil get_fx Rückgabe unterschiedliche Funktionen (Schließungen) abhängig von den verabschiedeten Argumenten.

Wenn Sie den ersten überspringen, überspringen Sie return Sie würden nichts von der ersten Funktion bekommen .. z. $ v5 und $ v6 hätten nichts zugewiesen. Wenn Sie die zweite übersprungen haben return In der zurückgegebenen Funktion würden sie nichts zurückgeben, wenn sie angerufen werden, dh. $v5() würde nicht zurückkehren 5 und $v6() würde nicht zurückkehren 6.

Andere Tipps

Zweiter Param von array_filter ist callback. Sie können es im Inneren angeben array_filter wie anonymous function oder geben Sie den Namen der Funktion an. Innen anonymous function Sie machen die Filterung, deshalb return Gebraucht. Die zweite Rückkehr besteht darin, die anonyme Funktion als Rückruf bei array_filter Es gibt die Referenz zu dieser Funktion zurück.

Mit der zweiten Funktion können Sie nicht nur einen Rückruf an Array_filter, sondern auch den Rückruf- und Filtrationskontext ($ min) gleichzeitig übergeben. Es ist eine überzeugende Art, Code wiederzuverwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top