El Match Expression v2 RFC ya ha sido aceptado y pasará a formar parte de la versión estable de PHP 8, la cual, como ya sabemos, será lanzada terminando el corriente año.
Por lo pronto ofrecerá una sintaxis limpia de una sola línea que permite de forma fácil relacionar expresiones coincidentes, pero el mismo RFC deja las puertas abiertas para futuras mejoras y funcionalidades.
¿De qué se trata este nuevo RFC?
Como expresión, permite capturar un valor mediante una asignación o retornarlo sin necesidad de utilizar una variable local, como sucede cuando utilizamos la sentencia switch
$a = 1; $b = 2; $resultado = 0; // Antes switch ($operacion) { case 'resta': $resultado = $a - $b; break; case 'multiplicacion': $resultado = $a * $b; break; case 'division': $resultado = $a / $b; break; default: $resultado = $a + $b; break; } // Después $resultado = match ($operacion) { 'resta' => $a - $b; 'multiplicacion' => $a * $b; 'division' => $a / $b; default => $a + $b; };
De esta manera no sólo se simplifica el código, sino que también se evitan errores comunes que suelen ocurrir con el uso de la sentencia switch
(como olvidar poner break;
al final de la resolución de una determinada condición).
En el caso de que la condición no coincida con ninguna expresión declarada, y no exista una resolución por defecto, se lanzará una excepción UnhandledMatchError
, evitando errores producidos por olvidarnos alguna de las condiciones.
match
también permite el uso de múltiples condiciones para una misma resolución:
echo match ($x) { 1, 2 => 'Lo mismo para 1 y 2', 3, 4 => 'Lo mismo para 3 y 4', };
¿Qué se espera para el futuro?
Alguna de las funcionalidades futuras que plantea el RFC son la posibilidad de tratar a la sentencia match
como bloque y no como expresión, el uso de expresiones regulares como condición y permitir obviar el valor true
como condición.
Esta nueva característica junto con otras prometedoras formarán parte de la nueva versión de PHP y desde Adue estamos ansiosos y atentos para comenzar a implementarlas en nuestros trabajos. Igual, si no podés aguantarte, la versión Alpha ya está disponible para pruebas locales ;), ¡eso sí! todavía no la uses en producción, hay que tener un poquito de paciencia hasta que salga la primera RC.
#LoHacemosAdue