
As funções de seta, também chamadas de fechamentos curtos , são uma boa maneira de escrever código limpo em PHP. Essa forma de escrita será útil ao passar fechamentos para funções como array_map ou array_filter .
Um exemplo:
 
Costumava ser escrito assim:
 $ids = array_map(function ($post) { return $post->id; }, $posts); 
Resumidamente:
- Disponível desde o PHP 7.4
- Comece com a palavra-chave fn
- Pode ter apenas uma expressão, que também é o valor de retorno.
- returnnão suportado
- Hintihg de tipo é suportado em argumentos e valores de retorno 
A maneira estereotipada de escrever o exemplo acima:
 $ids = array_map(fn(Post $post): int => $post->id, $posts); 
Duas outras coisas importantes:
- Operador variável suportado
- Os links são suportados para argumentos e valores de retorno
Se você deseja retornar um valor por referência, use a seguinte sintaxe:
 fn&($x) => $x 
As funções de seta implementam a mesma funcionalidade que você espera dos fechamentos normais, elas contêm apenas uma expressão.
Sem multilinha
Você leu certo: os curtos-circuitos podem conter apenas uma expressão. Isso significa que você não pode ter várias linhas nelas.
O argumento é este: o objetivo dos curtos-circuitos é reduzir a verbosidade. fn , definitivamente menor que a function em todos os sentidos. Ignorar a function e return palavras-chave não altera nada, mas torna o código mais legível.
Você concorda com esta opinião? Ao mesmo tempo, com a nova sintaxe para funções de linha única, existem muitas de várias linhas que não seriam inibidas por essa atualização.
Felizmente, no futuro, haverá uma RFC com um breve anúncio e funções de várias linhas, mas até agora esses são apenas meus sonhos.
Variáveis do escopo externo
Outra diferença significativa entre falhas curtas e normais é que as primeiras não exigem o uso da palavra-chave use para acessar dados de um escopo externo.
 $modifier = 5; array_map(fn($x) => $x * $modifier, $numbers); 
É importante observar que você não pode modificar essas variáveis. Os valores estão relacionados por valor, não por referência. Isso significa que você pode modificar o $modifier dentro de um curto-circuito, mas isso não afetará a variável $modifier localizada fora.
A única exceção é a $this , que funcionará exatamente da mesma forma que na versão normal:
 array_map(fn($x) => $x * $this->modifier, $numbers); 
Oportunidades futuras
Eu já mencionei a idéia de curto-circuito de várias linhas acima. Outra sugestão útil é permitir o uso de sintaxe curta nas classes, por exemplo, para getters e setters:
 class Post { private $title; fn getTitle() => $this->title; } 
Em geral, as funções de seta são um recurso muito bom, embora ainda haja espaço para melhorias.
Você tem alguma opinião sobre isso?