Pergunta

Este exemplo retirado da página de programação funcional da Phntherightway.

<?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 é o objetivo de ter return function() ?

Acabei de escrever isso e faz a mesma coisa.

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

Mesmo se eu nomear esse retorno de chamada para uma função, a função secundária parece desnecessária.

Eu ignorei algo ou tem um propósito diferente?

Foi útil?

Solução

É absolutamente necessário para criteria_greater_than Para retornar o valor que você deseja retornar. Por exemplo. para uma função retornar o valor 5:

function get_5() {
    return 5;
}

Você usa como $var = get_5();, mas se você estivesse definindo para uma constante, você apenas faria $var = 5; ou call_my_function(5). Observe que você precisa usar return Para retornar qualquer coisa em uma função. Agora considere esta função:

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

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

O que são $v5 e $v6? .. bem, são funções, porque foi o que eles retornaram. Na verdade $v5() == get_5() é verdade, mas $ 6 () == get_5 () é falso, porque get_fx Retorne diferentes funções (fechamentos) dependentes dos argumentos aprovados.

Se você pular o primeiro return Você não receberia nada da primeira função. Por exemplo. $ V5 e $ V6 não teriam nada atribuído. Se você pulou o segundo return Na função retornada, eles não retornariam nada quando chamados, ou seja. $v5() não retornaria 5 e $v6() não retornaria 6.

Outras dicas

Segunda param de array_filter é callback. Você pode especificar isso dentro array_filter Como anonymous function ou especifique o nome da função. Dentro de anonymous function você faz a filtragem, é por isso return usado. O segundo retorno é usar a função anônima como um retorno de chamada em array_filter Ele retorna a referência nesta função.

A segunda função permite que você passe não apenas o retorno de chamada para Array_filter, mas o contexto de retorno de chamada e filtração ($ min) de uma só vez. É uma maneira conveiniente de reutilizar o código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top