Función Flecha

Las funciones flecha fueron introducidas en PHP 7.4 como una sintaxis más concisa para las funciones anónimas.

Las funciones anónimas como las funciones flecha son implementadas utilizando la clase Closure.

Las funciones flecha tienen la forma básica fn (argument_list) => expr.

Las funciones flecha soportan las mismas funcionalidades que las funciones anónimas, a excepción de que el uso de las variables del ámbito padre es automático.

Cuando una variable utilizada en la expresión es definida en el ámbito padre, será implícitamente capturada por valor. En el siguiente ejemplo, las funciones $fn1 y $fn2 se comportan de manera idéntica.

Ejemplo #1 Las funciones flecha capturan las variables por valor automáticamente

<?php

$y
= 1;

$fn1 = fn($x) => $x + $y;
// equivalente a usar $y por valor:
$fn2 = function ($x) use ($y) {
return
$x + $y;
};

var_export($fn1(3));
?>

El resultado del ejemplo sería:

4

Esto también funciona si las funciones flecha están anidadas:

Ejemplo #2 Las funciones flecha capturan las variables por valor automáticamente, incluso anidadas

<?php

$z
= 1;
$fn = fn($x) => fn($y) => $x * $y + $z;
// Muestra 51
var_export($fn(5)(10));
?>

De manera similar a las funciones anónimas, la sintaxis de las funciones flecha permite firmas de función arbitrarias, esto incluye los tipos de parámetros y de retorno, valores por defecto, variables, así como el paso y retorno por referencia. Todos los siguientes ejemplos son funciones flecha válidas:

Ejemplo #3 Ejemplos de funciones flecha

<?php

fn(array $x) => $x;
static fn(
$x): int => $x;
fn(
$x = 42) => $x;
fn(&
$x) => $x;
fn&(
$x) => $x;
fn(
$x, ...$rest) => $rest;

?>

Las funciones flecha enlazan las variables por valor. Esto es aproximadamente equivalente a realizar un use($x) para cada variable $x utilizada dentro de la función flecha. Un enlace por valor significa que no es posible modificar un valor del ámbito exterior. Las funciones anónimas pueden ser utilizadas en su lugar para enlaces por referencia.

Ejemplo #4 Los valores del ámbito exterior no pueden ser modificados por las funciones flecha

<?php

$x
= 1;
$fn = fn() => $x++; // No tiene efecto
$fn();
var_export($x); // Muestra 1

?>

Historial de cambios

Versión Descripción
7.4.0 Las funciones flecha están ahora disponibles.

Notas

Nota: Es posible utilizar func_num_args(), func_get_arg(), y func_get_args() desde el interior de una función flecha.