Saltar al contenido

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 switch y match.

  • 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

  1. Requiere break: Si olvidas el break, puedes tener el problema de fall-through y resultados inesperados.

  2. Sintaxis más extensa: Con muchas condiciones, switch se vuelve repetitivo y verboso.

  3. No retorna valores directamente: Normalmente, asignas dentro de cada case o usas return de 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 break ni case.

  • Retorno directo: match produce 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: switch requiere break; match no.

  • Comparaciones estrictas: Para mayor precisión en tipos.

  • Código más conciso: match es 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.

Rutas de aprendizaje