Algunas novedades de PHP 8.1

php8.png
Solucionex
30
Abr 21

Aunque todavía faltan unos meses para la llegada de PHP 8.1 (prevista para finales de este 2021), ya empiezan a aparecer novedades muy interesantes que nos traerá esta nueva versión.

Vamos a dar un vistazo general a algunas de ellas.

 

Enums

Por fin llegan los Enums a PHP, posiblemente una de las cosas más solicitadas por la comunidad desde hace años.
Un enum es, básicamente, un tipo de dato, similar a una clase, que representa un grupo de constantes.

Veamos un ejemplo simple de cómo definiríamos un Enum:

enum Estado {
    case DRAFT;
    case PUBLICADO;
    case ARCHIVADO;
}

En este caso hemos creado un Enum Estado que representa los 3 estados posibles de alguna entidad. Podríamos ahora utilizar este Enum como tipo de dato en, por ejemplo, la llamada a una función:

function hacerAlgoSegunEstado(Estado $estado): void {
    ...
}

Y llamar a esta función de la forma:

hacerAlgoSegunEstado(Estado::PUBLICADO);

Los Enums también permiten asignar un valor a cada una de las constantes, por ejemplo, asignándole un valor numérico a cada estado, lo que puede resultar útil si necesitamos utilizarlo junto con una base de datos.

Por otra parte, los Enums permiten añadir funciones propias, crear interfaces, etc.

 

Never

El nuevo return type never se puede utilizar para indicar que una función cortará la ejecución del programa, es decir, que después de llamar a dicha función, el programa parará. 

El ejemplo más simple: en una función que ejecute, de forma no condicional, un exit().

function stopExecution(): never {
    exit();
}

No parece algo demasiado útil para el uso cotidiano del lenguaje, pero ayudará mucho a los analizadores estáticos a detectar posibles problemas en nuestro código, por lo que recomendamos su uso.

 

Fibers

Fibers es el nombre que se le ha dado a los threads o hilos en PHP. Es un mecanismo para implementar alguna forma de paralelismo. Hasta ahora era posible utilizando generadores y el tipo de return 'yield', pero era muy limitado.

Por lo general, será bastante raro que necesitemos utilizar estos Fibers en nuestros desarrollos del día a día, pero, sin duda, habrá muchas librerías de bajo nivel de PHP que puedan hacer un uso extensivo de esta nueva funcionalidad.

 

array_is_list()

PHP 8.1 nos trae una nueva función, array_is_list, que nos devolverá un Boolean indicando si el array que le pasamos tiene las keys ordenadas, empezando por 0, y secuenciales.

Veamos un ejemplo:

array_is_list([1, 2, 3]); // TRUE
array_is_list([1 => 1, 2 => 2, 3 => 3]); // FALSE
array_is_list([0 => 1, 1 => 2, 2 => 'hello']); // TRUE
array_is_list(['a', 1 => 'b', 'c']); // TRUE

Esta función puede ser muy útil, ya que en algunos casos necesitamos saber si un array es una lista (TRUE) o un array asociativo (FASLE). Un ejemplo fácil de esto es 'json_encode', que, dependiendo del caso, generará una estructura distinta de JSON.