Hola laradevs! ¿como están tanto tiempo? Volví al ruedo con Laraveltip después de varios meses con bastante trabajo (por suerte!). Y en esta vuelta les traiga las novedades que posiblemente saldrá en la próxima versión de PHP 🚀
Algunas de las características que voy a mencionar están en face de análisis y voto pero muchas otras ya están aprobadas para PHP 8.1. Empecemos!
Nueva función array_is_list
Empecemos con la primera función ya aprobada para que este disponible en PHP 8.1. La función es array_is_list
. La verdad que su nombre es bastante expresivo pero básicamente lo que hace es devolver true/false si el arreglo que se le pasa como parámetro es un arreglo realmente o es una lista.
Vamos a verlo con un ejemplo:
Les dejo el RFC de la característica: https://wiki.php.net/rfc/is_list
Desempaquetado de arreglo con claves de tipo string
Seguimos con características relacionadas a los arreglos. En este caso se trata del desempaquetado de un arreglo que tiene texto como clave.
Esta característica podría ser un reemplazo a la función array_merge
. Vean este ejemplo:
El desempaquetado de un arreglo ya esta disponible desde PHP 7.4 pero solo era posible con claves numéricas. Aquí el RFC de la característica: https://wiki.php.net/rfc/array_unpacking_string_keys
Integración nativa del tipo de dato Enum
¡Empecemos con los platos fuertes! 🍝
La primer característica importante que se va a venir en PHP 8.1 es la integración de forma nativa del tipo de dato Enum o Enumerations. Los Enums son un tipo de dato especial que existe en muchos lenguajes de programación pero, hasta el momento, no existía en PHP de forma oficial.
Las enumeraciones lo que nos permiten son definir una cantidad de valores finitos que serán los valores posibles que puede tomar un modelo. Mejor, veamoslo con un ejemplo:
Las enumeraciones nos proveen un código más robusto, seguro y legible por eso es una gran noticia que se agreguen a PHP 8.1. 💪
Hay muchas implementaciones conocidas de Enums pero siempre es mejor que este integrado directamente en el lenguaje.
Si bien a día de hoy este RFC se encuentra en face de votación, lo más seguro es que se vaya a incluir ya que la votación termina en 4 días y el resultado es 41 a 7 votos. Les dejo el RFC https://wiki.php.net/rfc/enumerations
PHP Asincrónico con Fibers
Uufff!! Esta característica puede cambiarlo todo y veras que no exagero cuando te comente que son las Fibers. Las Fibers son las Promise de Javascript o, para los que no sepan que son las Promise, son lo que nos permitirá hacer programación asíncrona en PHP! 🙌
«¿Y que es la programación asíncrona?» Actualmente PHP ejecuta cada sentencia una después de la otra. En cambio, con la programación asíncrona podemos llamar una función y no esperar que esta haga su respectivo return
para seguir ejecutando el resto del código. Cuando dicha función asíncrona tenga disponible el resultado, PHP volverá a esa porción de código para hacer lo necesario.
Pero creo que todo se entiende mejor con un ejemplo, no? Veamos uno implementando las fibers:
En este ejemplo simple, primero estamos creando una fibra pasandole una función que se ejecutará cuando llamemos al método start()
. Pero nuestro código seguirá con la ejecución. Es por eso que primero se imprime «Hola como estas?» y luego «Código asíncrono». 😉
Actualmente hay muchas librerías que nos permiten hacer esto mismo, como ReactPHP. Pero siempre es mejor que la característica este incluida en el lenguaje.
Este RFC se encuentra en face de discusión pero esperamos que se sume a la versión 8.1 de PHP 🙏
Property Accessors
El RFC de Property Accessors se encuentra como borrador pero la intención es sacarlo para la versión 8.1 en principio.
«¿Y que es esto de Property Accessors?» te estarás preguntando (a menos que ya sepas C#). Buenos, las property accessors vienen a reemplazar los setters y getters. En realidad, no a reemplazarlos, sino a brindarnos una forma más simple de hacer esto.
Otra palabra clave que se agregaría para esta nueva característica es guard. Esta palabra clave nos va a permitir ejecutar un comportamiento antes que se setee la propiedad. Por ejemplo, podríamos validar el valor de entrada:
Otra palabra clave que se va a agregar para las property accessors es lazy. Lazy lo que nos permitirá hacer es setter la propiedad al momento de invocarla. Por ejemplo:
El método generatePassword
solo se llamaría la primera vez.
Hay muchas detalles interesantes con esta característica así que les recomiendo leer su RFC si tienen curiosidad: https://wiki.php.net/rfc/property_accessors.
Conclusión
Todavía no hay una fecha exacta para la salida de PHP 8.1 pero esperamos que sea pronto. Espero que les haya gustado el artículo, que lo compartan y me dejen en los comentarios que característica les gusto más. Nos vemos en la próxima. 😉🤙
Muy bueno, gracias