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 de switch.
  • Las comparaciones de Match son estrictas en tipo. Es decir '8.0' (cadena) no coincidirá con 8.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:

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

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