A votação da sintaxe abreviada para as funções está concluída (51 votos a favor, 8 contra).
Foi:
$result = array_filter($paths, function ($v) use ($names) { return in_array($v, $names); });
Tornou-se:
$result = array_filter($paths, fn($v) => in_array($v, $names));
Detalhes sob o corte
A nova sintaxe é:
Sintaxe
fn(_) => _
Na assinatura de uma função de seta, como em uma função regular, você pode especificar tipos, padrões, etc.
fn(array $x) => $x; fn(): int => $x; fn($x = 42) => $x; fn(&$x) => $x; fn&($x) => $x; fn($x, ...$rest) => $rest;
Atenção! Uma nova palavra-chave fn
, o que significa incompatibilidade com versões anteriores!
Outras idéias de sintaxe (descartadas)
Opções consideradas:
e alguns outros
Variáveis de fechamento
Importante! Diferentemente das versões anteriores do php, em que era necessário definir explicitamente variáveis bloqueáveis com o operador use , a função arrow fecha implicitamente a escala pai inteira.
Aqui estão as entradas equivalentes:
$y = 1; $fn1 = fn($x) => $x + $y; $fn2 = function ($x) use ($y) { return $x + $y; };
A variável $ this fecha como qualquer outra variável. Se esse é um comportamento indesejado, você pode desativá-lo com a palavra-chave estática .
class Test { public function method() { $fn = fn() => var_dump($this); $fn();
As variáveis de fechamento nas funções de seta ocorrem por valor (em contraste com o idioma Go, por exemplo). I.e. alterar variáveis dentro de uma função não alterará a variável no escopo pai.
Conclusões
O código se tornou muito mais compacto e, embora não seja tão compacto quanto o javascript e algumas outras linguagens, ainda será muito mais agradável escrever:
$result = Collection::from([1, 2]) ->map(fn($v) => $v * 2) ->reduce(fn($tmp, $v) => $tmp + $v, 0); echo $result;
Diferentemente de outros idiomas, as funções de seta no php não suportam múltiplas instruções separadas por um caractere ;
, porque isso (de acordo com os autores da RFC) contradiz a ideia de uma sintaxe abreviada. Talvez isso seja revisto no futuro.
Definitivamente discutiremos as funções de seta em php em detalhes no podcast Zinc Prod , por isso não deixe de se inscrever.
Link RFC