Chose Language:
Author: Admin/Publisher |finished | checked

PHP match

a partir de PHP >= 8

Hoy 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

Sintaxis / Sintax
$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,
};
La expresión match siempre debe de terminar con ;

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 match
class 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";
Category: php
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category