Uma função anônima é uma função que não tem um nome.
Exemplo:
function ($x, $y) {
return $x * $y;
};
Veja acima que precisamos terminar a função com um ponto e vírgula (;) porque o PHP o trata como uma expressão.
Para usar uma função anônima, você precisa atribuí-la a uma variável e chamar a função por meio da variável.
$multiplicar = function ($x, $y) {
return $x * $y;
};
echo $multiplicar(10, 20);
Passando uma função anônima para outra função
EXEMPLO USANDO UMA FUNÇÃO COMUM
O exemplo a seguir mostra como dobrar cada número em um array.
No exemplo abaixo, usamos a função array_map(). A função array_map() aceita uma função de retorno de chamada e um array.
Abaixo,
- definimos uma função nomeada chamada dobrar_valor() para dobrar um número.
- Criamos um array de inteiros
- chamamos a função array_map() para dobrar cada elemento do array $lista.
function dobrar_valor($elemento)
{
return $elemento * 2;
}
$lista = [10, 20, 30];
$dobrar_lista = array_map(obrar_valor, $lista);
print_r($dobrar_lista);
Resultado:
Array
(
[0] => 20
[1] => 40
[2] => 60
)
EXEMPLO USANDO UMA FUNÇÃO ANÔNIMA
O exemplo a seguir faz o mesmo, mas usa uma função anônima:
$lista = [10, 20, 30];
$resultado = array_map(function ($elemento) {
return $elemento * 2;
}, $lista);
print_r($resultado);
Escopo da função anônima
Abaixo, a variável $mensagem não pode ser acessada pela função anônima, por estar fora do escopo.
$mensagem = 'Oi';
$diga = function () {
echo $mensagem; //ERRO "PHP Notice: Undefined variable..."
};
$diga();
Para usar uma variável usamos o construtor use
$mensagem = 'Oi';
$diga = function () use ($mensagem) {
echo $mensagem; //Sem erros
};
$diga();
$message é passado para a função anônima por valor, não por referência. Se você alterá-lo dentro da função anônima, a alteração não será refletida fora da função. Vamos ver:
$mensagem = 'Oi';
$diga = function () use ($mensagem) {
$mensagem = "Olá!"
echo $mensagem;
};
$diga();
echo $mensagem;
Dentro da função $mensagem = “Olá!” tem valor diferente de $mensagem = ‘Oi’;
Se desejamos passar uma variável para uma função anônima por referência, precisarmos usar o operador &
Retornar uma função anônima de uma função
function multiplicador($x)
{
return function ($y) use ($x) {
return $x * $y;
};
}
$dobrar = multiplicador(2);
echo $dobrar(100); // 200
$triplicar = multiplicador(3);
echo $triplicar(100); // 300
Acima,
- definimos uma função chamada multiplicador que retorna uma função anônima.
- chamamos a função multiplicador e atribuímos seu valor retornado à variável $dobrar. Como o valor de retorno é uma função, ele pode ser chamado como uma função normal ($dobrar(2)).
- chamamos a função multiplicador e atribuímos seu valor retornado à variável $triplicar. Desta vez passamos 3 em vez de 2.
Conclusão
Vimos que Uma função anônima é uma função sem nome e que para acessar as variáveis do escopo pai dentro de uma função anônima, colocamos as variáveis usando use.
Uma função anônima pode ser atribuída à uma variável, passada para uma função ou retornada de uma função.