Domanda

Questo esempio prelevato dalla pagina di programmazione funzionale di 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

Qual è lo scopo di avere return function() ?

Ho appena scritto questo e fa la stessa cosa.

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

Anche se nomino questo callback a una funzione, la funzione secondaria sembra inutile.

Ho trascurato qualcosa o ha uno scopo diverso?

È stato utile?

Soluzione

È assolutamente necessario per criteria_greater_than Per restituire il valore che desideri restituire. Per esempio. per una funzione restituire il valore 5:

function get_5() {
    return 5;
}

Lo usi come $var = get_5();, ma se lo stavi preparando su una costante lo faresti solo $var = 5; o call_my_function(5). Si noti che devi usare return Per restituire qualsiasi cosa in una funzione. Ora considera questa funzione:

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

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

Cosa sono $v5 e $v6? .. beh sono funzioni, perché è quello che sono tornati. Infatti $v5() == get_5() è vero, ma $ 6 () == get_5 () è falso, perché get_fx restituire diverse funzioni (chiusure) dipendenti dagli argomenti approvati.

Se dovessi saltare il primo return Non otterresti nulla dalla prima funzione. EG. $ V5 e $ V6 non avrebbero nulla assegnato. Se hai saltato il secondo return Nella funzione restituita non avrebbero restituito nulla quando chiamati, cioè. $v5() non sarebbe tornato 5 e $v6() non sarebbe tornato 6.

Altri suggerimenti

Secondo parametro di array_filter è callback. Puoi specificarlo all'interno array_filter come anonymous function o specificare il nome della funzione. All'interno di anonymous function fai il filtro, ecco perché return Usato. Il secondo ritorno è utilizzare la funzione anonima come callback a array_filter Restituisce il riferimento su questa funzione.

La seconda funzione consente di passare non solo callback ad Array_filter ma contesto di callback e filtrazione ($ min) contemporaneamente. È un modo convincente di riutilizzare il codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top