Question

Cet exemple tiré de la page de programmation fonctionnelle de 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

Quel est le but d'avoir return function() ?

Je viens d'écrire ceci et ça fait la même chose.

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

Même si je nomme ce rappel à une fonction, la fonction secondaire semble inutile.

Ai-je négligé quelque chose ou a-t-il un but différent?

Était-ce utile?

La solution

C'est absolument nécessaire pour criteria_greater_than Pour retourner la valeur que vous souhaitez retourner. Par exemple. Pour qu'une fonction renvoie la valeur 5:

function get_5() {
    return 5;
}

Vous l'utilisez comme $var = get_5();, mais si vous le fixiez sur une constante, vous feriez juste $var = 5; ou call_my_function(5). Remarquez que vous devez utiliser return Afin de retourner quoi que ce soit dans une fonction. Considérez maintenant cette fonction:

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

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

Que sont $v5 et $v6? .. Eh bien, ce sont des fonctions, car c'est ce qu'ils ont renvoyé. En réalité $v5() == get_5() est vrai, mais 6 $ () == get_5 () est faux, car get_fx Renvoie différentes fonctions (fermetures) dépendant des arguments passés.

Si tu devais sauter le premier return Vous n'obtiendrez rien de la première fonction. EG. V5 $ et $ V6 n'auraient rien attribué. Si tu as sauté le deuxième return Dans la fonction retournée, ils ne retourneraient rien lorsqu'ils s'appelleraient, c'est-à-dire. $v5() ne reviendrait pas 5 et $v6() ne reviendrait pas 6.

Autres conseils

Deuxième param array_filter est callback. Vous pouvez le spécifier à l'intérieur array_filter comme anonymous function ou spécifiez le nom de la fonction. À l'intérieur de anonymous function Vous faites le filtrage, c'est pourquoi return utilisé. Le deuxième retour consiste à utiliser la fonction anonyme comme rappel à array_filter il renvoie la référence sur cette fonction.

La deuxième fonction vous permet de passer non seulement le rappel à Array_Filter mais aussi le contexte de rappel et de filtration ($ min). C'est un moyen de réutilisation de réutilisation du code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top