Utilizando Lambda e Closures no PHP 5.3

Artigo retirado do site iMaster e reproduzido aqui na sua integra
http://imasters.com.br/linguagens/php/funcoes-anonimas-lambda-e-closure-no-php/?utm_source=iMasters&utm_campaign=80c91f405c-News_semanal_2014_01_201_20_2015&utm_medium=email&utm_term=0_c1528e6ab3-80c91f405c-359962985

Uma função anônima é qualquer função que não possui ou não precise de um nome identificador. Elas podem ser definidas em qualquer lugar e normalmente são atribuídas a uma variável e/ou utilizadas como callback.

Conceitualmente, temos dois tipos de funções anônimas, lambda e closures, que estão disponíveis a partir da versão 5.3 do PHP.

Lambda
Lambda é uma função anônima básica. Muitas linguagens não utilizam esse termo, apenas chamam de função anônima, mas particularmente costumo utilizar, pois a função create_function, que está disponível desde a versão 4 do PHP, cria funções anônimas há um bom tempo, logo costumo chamar este novo estilo de lambda para diferenciar. Confira a sintaxe de uma lambda:

1
$var = function ( parameters ) {
2
statement
3
};
Lambdas são mais rápidas que funções criadas utilizando a função create_function.

Closure
Closures são funções anônimas um pouco mais complexas que as lambdas, pois permitem interações com variáveis externas, ou seja, variáveis que foram definidas no mesmo escopo em que o closure foi definido, para isso utilizamos a palavra-chave use, informando as variáveis externas que iremos interagir entre parênteses.

1
$var = function ( parameters ) use ( variables ) {
2
statement
3
};
É importante finalizar a declaração de uma lambda ou closure com ponto e vírgula após as chaves.

Método mágico __invoke()
O PHP oferece um conjunto de métodos mágicos que podem ser utilizados quando necessário em uma classe e são executados quando um determinado comportamento é solicitado.

O método mágico __invoke() foi adicionado na versão 5.3 do PHP, sendo este executado quando tentamos chamar um objeto como uma função (bem parecido com uma função variável), que foi apresentada no artigo Variáveis e Constantes no PHP.

1

Trabalhando com lambda e closure
Agora que conhecemos um pouco sobre funções anônimas, vamos praticar:

1

Começamos o script acima simulando um array de configurações, em seguida criamos uma lambda, para calcular a soma entre dois parâmetros, atribuindo a variável $lambda.

Após testar a lambda, definimos um closure que recebe uma mensagem e interage com o array de configurações($config) para padronizar como esta mensagem deve ser exibida. Com isso, não precisamos passar as configurações como parâmetro toda vez que a função/closure for utilizada, em seguida testamos o closure.

Por último criamos uma função que recebe dois parâmetros. O primeiro é uma mensagem, já o segundo é um callback, ou seja, uma função que deve ser chamada antes de retornar o resultado; sendo assim, ao executar a função firstWord passamos a mensagem como primeiro parâmetro e como segundo parâmetro enviamos a variável $closure, que antes de retornar o resultado é executada.

Referências
http://php.net/manual/pt_BR/functions.anonymous.php
http://stackoverflow.com/questions/150129/what-is-a-lambda
http://stackoverflow.com/questions/220658/what-is-the-difference-between-a-closure-and-a-lambda