PHP 8 introdujo varios cambios que facilitan la escritura de código más conciso y expresivo. Uno de estos cambios es la nueva construcción match, que complementa o incluso reemplaza en muchos casos el tradicional switch.
En esta guía verás:
Una comparativa entre
switchymatch.Ejemplos detallados, incluyendo la sintaxis
match(true).Casos de uso y buenas prácticas.
Para profundizar en los cambios de PHP 8, te recomendamos la Ruta de Aprendizaje PHP 8 y la entrada sobre Novedades en PHP 8.
1. Recordatorio de switch
El switch clásico de PHP nos permite evaluar una expresión contra múltiples valores:
Limitaciones de switch
Requiere
break: Si olvidas elbreak, puedes tener el problema de fall-through y resultados inesperados.Sintaxis más extensa: Con muchas condiciones,
switchse vuelve repetitivo y verboso.No retorna valores directamente: Normalmente, asignas dentro de cada
caseo usasreturnde forma manual en un contexto de función.
2. Llegada de match en PHP 8
Con PHP 8, se introduce la construcción match, que mejora muchos de los inconvenientes de switch al comportarse como un switch “funcional”:
No necesita
break.Retorna un valor directamente.
Realiza comparación estricta (
===).
La estructura básica es:
3. Ejemplos Prácticos de match
3.1. Reemplazando un switch básico
Supongamos que evaluamos el estado de una tarea:
Ventajas:
Código más compacto: Sin
breaknicase.Retorno directo:
matchproduce un valor que puedes asignar a una variable o retornar en una función.Comparación estricta: PHP validará tipos y valores usando
===.
3.2. Múltiples valores en una sola rama
Puedes agrupar varios valores en un mismo “caso”:
3.3. Usando expresiones y funciones
match puede evaluar expresiones o invocar funciones dentro de cada rama:
3.4. Comparaciones estrictas
A diferencia de switch (comparación flexible ==), match usa comparación estricta (===):
3.5. match(true): Evaluando condiciones directamente
En ocasiones, deseas validar varias condiciones (no solo un valor). Con match(true), cada rama se evalúa como una expresión booleana:
Aquí, match(true) revisa cada “caso” como si fuera un if/else. La primera condición verdadera determina el valor retornado.
4. Manejo de Excepciones
match requiere que todas las ramas estén cubiertas si no se define un default. Si no se define un default y no se encuentra coincidencia, PHP lanzará un UnhandledMatchError. Por eso, es buena práctica añadir un default para valores imprevistos.
5. Cuándo usar match en lugar de switch
Retornar valores: Cuando necesitas un resultado directo en una sola línea.
Evitar fall-through:
switchrequierebreak;matchno.Comparaciones estrictas: Para mayor precisión en tipos.
Código más conciso:
matches más corto y claro, especialmente con muchas condiciones.
Conclusión
Con la llegada de match en PHP 8, el lenguaje avanza hacia un estilo de programación más funcional, evitando la verbosidad de switch y fomentando comparaciones estrictas. Esta nueva construcción hace más fácil retornar valores, permite agrupar varios casos en una sola rama e incluso evaluar condiciones de tipo “if/else” con match(true).
Para seguir conociendo las últimas características de PHP 8, visita la Ruta de Aprendizaje PHP 8 y revisa la lista completa de Novedades en PHP 8, donde encontrarás explicaciones detalladas y ejemplos prácticos.