PHP match
a partir de PHP >= 8Hoy veremos esta nueva estructura de control en PHP llamada match, ya hemos visto if
y switch
ahora veremos una estructura similar a estas.
Match realiza comparaciones estrictas utilizando ===
esto nos permite evitar errores de comparación, además de esto la expresión match no pasa al siguiente caso por lo que no tendremos que utilizar break.
Cabe también destacar que la expresión match es mucho más limpia que switch
y que su resultado no necesariamente debe ser usado inmediatamente.
Veamos su sintaxis:
como si fuera un if
estricto
$return_value = match (subject_expression) { single_conditional_expression => return_expression, };
Multiples condiciones con el mismo retorno.
Sintaxis / Sintax$return_value = match (subject_expression) { conditional_expression1, conditional_expression2 => return_expression, };
Multiples condiciones con distintos retornos
Sintaxis / Sintax$return_value = match (subject_expression) { conditional_expression1 => return_expression, conditional_expression2 => return_expression2, };
uso de default: si ninguna de las anteriores se cumple se utilizará lo que esté en default.
Sintaxis / Sintax$return_value = match (subject_expression) { conditional_expression1 => return_expression, conditional_expression2 => return_expression2, default => return_expresion3, };
Ejemplos de PHP match
Podemos reservar el valor obtenido de un mach para su uso posterior
$valor = 2; // Reservamos el resultado del match $mensaje = match($valor) { 1 => 'El valor es uno', 2 => 'El valor es dos', 3 => 'El valor es tres', default => 'El valor no coincide con ninguna opción', }; // Utilizamos el mensaje posteriormente echo $mensaje;
Haciendo una llamada a echo para imprimir en pantalla el valor devuelto de match
$opcion = "B"; echo "Seleccionaste la opción: $opcion\n"; echo match($opcion) { 'A' => 'Opción A seleccionada', 'B' => 'Opción B seleccionada', 'C' => 'Opción C seleccionada', default => 'Opción no válida', };
Múltiples condiciones con el mismo retorno.
$edad = 25; $grupoEdad = match($edad) { 0 => 'Bebé', 1, 2, 3, 4 => 'Niño pequeño', 5, 6, 7, 8, 9, 10 => 'Niño', 11, 12, 13, 14, 15, 16 => 'Adolescente', 17, 18, 19 => 'Joven', default => 'Adulto', }; echo "La persona de $edad años es un $grupoEdad.";
Un ejemplo un poco más complejo, donde se notan más las ventajas de usar match.
Ejemplo de matchclass Figura { public string $tipo; public $dimensiones; public function __construct(string $tipo, $dimensiones) { $this->tipo = $tipo; $this->dimensiones = $dimensiones; } public function calcularArea(): float { return match($this->tipo) { 'circulo' => M_PI * pow($this->dimensiones, 2), 'rectangulo' => $this->dimensiones['base'] * $this->dimensiones['altura'], default => 0, }; } } // Crear un círculo con radio 5 $circulo = new Figura('circulo', 5); echo "Área del círculo: " . $circulo->calcularArea() . "\n"; // Crear un rectángulo con base 4 y altura 6 $rectangulo = new Figura('rectangulo', ['base' => 4, 'altura' => 6]); echo "Área del rectángulo: " . $rectangulo->calcularArea() . "\n"; // Caso por defecto, figura desconocida $figuraDesconocida = new Figura('hexagono', 10); echo "Área de figura desconocida: " . $figuraDesconocida->calcularArea() . "\n";