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
breakcomo 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
