Se completa la votación de la sintaxis abreviada para las funciones (51 votos a favor, 8 en contra).
Fue:
$result = array_filter($paths, function ($v) use ($names) { return in_array($v, $names); });
Se convirtió en:
$result = array_filter($paths, fn($v) => in_array($v, $names));
Detalles debajo del corte
La nueva sintaxis es:
Sintaxis
fn(_) => _
En la firma de una función de flecha, como en una función regular, puede especificar tipos, valores predeterminados, etc.
fn(array $x) => $x; fn(): int => $x; fn($x = 42) => $x; fn(&$x) => $x; fn&($x) => $x; fn($x, ...$rest) => $rest;
Atencion fn
una nueva palabra clave fn
, lo que significa incompatibilidad hacia atrás.
Otras ideas de sintaxis (descartadas)
Opciones consideradas:
y algunos otros
Variables de cierre
Importante! A diferencia de las versiones anteriores de php, donde era necesario establecer explícitamente variables bloqueables con el operador use , la función de flecha cierra implícitamente toda la escala principal en sí misma.
Aquí están las entradas equivalentes:
$y = 1; $fn1 = fn($x) => $x + $y; $fn2 = function ($x) use ($y) { return $x + $y; };
La variable $ this se cierra como cualquier otra variable. Si este es un comportamiento no deseado, puede deshabilitarlo con la palabra clave estática .
class Test { public function method() { $fn = fn() => var_dump($this); $fn();
Las variables de cierre en las funciones de flecha se producen por valor (en contraste con el lenguaje Go, por ejemplo). Es decir El cambio de variables dentro de una función no cambiará la variable en el ámbito primario.
Conclusiones
El código se ha vuelto mucho más compacto, y aunque no es tan compacto como en JavaScript y algunos otros idiomas, aún será mucho más agradable de escribir:
$result = Collection::from([1, 2]) ->map(fn($v) => $v * 2) ->reduce(fn($tmp, $v) => $tmp + $v, 0); echo $result;
A diferencia de otros lenguajes, las funciones de flecha en php no admiten múltiples declaraciones separadas por un carácter ;
, porque esto (según los autores del RFC) contradice la idea de una sintaxis abreviada. Quizás esto se revisará en el futuro.
Definitivamente discutiremos las funciones de flecha en php en detalle en el podcast Zinc Prod , así que asegúrese de suscribirse.
Enlace RFC