El 26 de noviembre de 2020 fue lanzado oficialmente la versión 8 de PHP. En esta tercera entrega de nuestra serie de Novedades de PHP 8 te hablaré sobre la nueva expresión match
con la que podrás reemplazar tus sentencias SWITCH / CASE con una sintaxis sucinta y más amigable.
Las sentencias SWITCH no son tan populares en la programación orientada a objetos, sin embargo en algunas ocasiones resultan útiles; por ejemplo, cuando tenemos una variable y queremos ejecutar diferentes instrucciones dependiendo de su tipo. Veamos un ejemplo extraído de Laravel Enlighten:
switch (gettype($value)) { case 'array': return $this->exportArray($value); case 'integer': return $this->format->integer($value); case 'double': case 'float': return $this->format->float($value); case 'string': return $this->format->string($value); case 'boolean': return $this->format->bool($value ? 'true' : 'false'); case 'NULL': case 'null': return $this->format->null(); default: return ''; }
Uso esta sentencia SWITCH
para exportar el valor con diferentes etiquetas HTML dependiendo de su tipo para así soportar el resaltado de sintaxis:
Afortunadamente, con PHP 8 podemos mejorar esta sintaxis utilizando la nueva Expresión MATCH.
return match(gettype($value)) { 'array' => $this->exportArray($value), 'integer' => $this->format->integer($value), 'double', 'float' => $this->format->float($value), 'string' => $this->format->string($value), 'boolean' => $this->format->bool($value ? 'true' : 'false'), 'NULL', 'null' => $this->format->null(), default => '', };
Con la cual se obtiene el mismo resultado que antes.
Sin embargo, hay algunos detalles que debemos tener en cuenta:
Características de la expresión MATCH de PHP 8
- Match es una expresión, por lo tanto su resultado puede ser almacenado en una variable o retornado (como vimos en el ejemplo anterior).
- Cada variante de Match solo acepta una expresión de una sola línea y por lo tanto no necesita
break
como en el caso deswitch
. - Las comparaciones de Match son estrictas en tipo. Es decir
'8.0'
(cadena) no coincidirá con8.0
(número). - Si quieres coincidir con más de un valor, puedes separarlos por comas, como en el ejemplo anterior:
'double', 'float'
.
Si deseas aprender más sobre PHP, únete a nuestra comunidad de Discord donde te compartiremos las próximas entradas de esta serie:
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Nueva forma de definir constructores en PHP 8 Lección siguiente Nuevo operador Nullsafe en PHP 8