La expresión match() en PHP

Igual no te habías enterado de la existencia de la expresión match() en PHP. Es algo que se añadió en la versión 8.

Así a primera vista parece un switch:

$valor = 2;

$valorEnLetras = match($valor) {
1 => 'Uno',
2 => 'Dos'
};

echo $valorEnLetras;

Pero tiene algunas diferencias:

match() retorna un valor

La expresión match devuelve un valor que podemos (o no) almacenar en una variable. En el ejemplo lo almacenamos en la variable $valorEnLetras.

Si no se encuentra un valor match() falla

Este código provocaría un error:

$valor = 3;

$valorEnLetras = match($valor) {
1 => 'Uno',
2 => 'Dos'
};

echo $valorEnLetras;

Porque match() no es feliz si no consigue localizar el valor que le pasamos.

En la documentacion oficial se refieren a ésto como: «Una expresión match debe ser completa».

Si encuentra un valor ya no sigue

Si en el ejemplo anterior la variable $valor contiene un 1 devuelve el valor ‘Uno’ directamente y ya no prueba con el 2. No hace falta meter un break.

Los valores se comparan usando ===

Este ejemplo fallaría porque 1 no es exactamente igual que 1.0:

$valor = 1.0;

$valorEnLetras = match($valor) {
1 => 'Uno',
2 => 'Dos'
};

echo $valorEnLetras;

¿Sabes lo que es el reto de PHP?

He creado el PHP Journey, una plataforma para que recibas de forma gratuita un email cada día con una pequeña perla de sabiduría de PHP y una pregunta que deberás responder.

Cada día pones a prueba tus conocimientos y aprendes algo nuevo.

Apúntate aquí:

https://urlantools.urlanheat.com/newsletter/php-journey/subscribe


Podemos (y a veces debemos) usar default

Al igual que el switch podemos usar default para los casos que no tenemos recogidos:

$valor = 1.0;

$valorEnLetras = match($valor) {
1 => 'Uno',
2 => 'Dos',
default => 'No se qué número es'
};

echo $valorEnLetras;

Podemos usar más de un valor en cada caso

Y también podemos usar varios valores por cada una de las opciones:

$valor = 1.0;

$valorEnLetras = match($valor) {
1, 1.0 => 'Uno',
2, 2.0 => 'Dos',
default => 'No se qué número es'
};

echo $valorEnLetras;

Deja un comentario