Funções de seta no PHP 7.4
O PHP 7.4 já está na versão RC2 e, esperançosamente, será lançado em cerca de 2 meses. A lista de novos recursos está aqui (esta página pode ser atualizada quando o 7.4 for lançado). Na 7.4, finalmente, o PHP possui as funções de seta; portanto, não apenas as respostas das funções podem ser mais curtas agora, mas também a passagem de fechamentos para outras funções também pode ser muito mais curta. Aqui estão alguns exemplos:
Retorno de entrada + 1:
Função anônima (fechamento) - 25 bytes -
Experimente online!
function($n){return$n+1;}
Função de seta - 12 bytes -
Experimente online!
fn($n)=>$n+1
Multiplique os itens da primeira entrada (matriz de entradas) pela segunda entrada (int):
Função anônima (fechamento) - 72 bytes -
Experimente online!
function($a,$n){return array_map(function($b)use($n){return$b*$n;},$a);}
Função de seta - 38 bytes -
Experimente online!
fn($a,$n)=>array_map(fn($b)=>$b*$n,$a)
Você percebeu que $n
é acessível na função interna sem uma use $n
declaração? Sim, esse é um dos recursos da função de seta.
Como uma observação lateral, não consegui que as funções de seta funcionassem recursivamente (chame a mesma função de seta dentro de si), porque não podemos dar um nome a elas e armazená-las como um fechamento em uma variável que $f
não se torna $f
acessível por si mesma (triste ) Portanto, este exemplo não funciona e o uso $f
na primeira linha causa um erro fatal:
$f=fn($n)=>$n?$f($n-1):0;
$f(5); // Causes error: "PHP Notice: Undefined variable: f" + "PHP Fatal error: Uncaught Error: Function name must be a string"
Mas chamar uma função de seta dentro de uma função de seta diferente funciona:
$f1=fn($n)=>$n+1;
$f2=fn($n)=>$f1($n-1);
$f1(2) // Returns 3
$f2(2) // Returns 2