Las novedades más importantes de PHP 8.1

Rate this post

Lejos han quedado los tiempos de la fallida versión 6 de PHP y su salto de 5.6 a 7.0. Desde que se lanzó PHP 7 el desarrollo del lenguaje no ha parado y nos ha ido entregando nuevas funcionalidades, cambios y mejoras de rendimiento propias de los lenguajes modernos.

8.0.12 es la versión estable actual pero en breve se lanzará la nueva versión 8.1 que traerá de nuevo un conjunto de mejoras muy interesantes tanto para mantenedores de librerías y frameworks como para desarrolladores de aplicaciones. En este artículo vamos a repasar las que hemos considerado más interesantes desde el equipo de desarrollo de acceseo.

Pure intersection types (rfc)


Ahora podemos tipar parámetros, propiedades o retornos con intersección de tipos. La intersección indica que el valor tipado debe cumplir todos los tipos especificados y es útil, por ejemplo, cuando queremos asegurar que una variable implementa varias interfaces.

En versiones anteriores, se permitía la unión de tipos Foo|Bar de forma que el valor debía pertenecer a uno de los tipos especificados, con la intersección debe cumplir con todos los requerimientos.

Enums (rfc)


Los enums presentes en muchos lenguajes de programación llegan a PHP. Hasta el momento era común encontrar clases con constantes, describiendo las opciones disponibles para un valor, pero el sistema de tipado no ofrecía ninguna forma de forzar a que los valores utilizados estuvieran entre las constantes creadas para tal uso. Aunque es un pequeño cambio, creemos que va a mejorar mucho la calidad de vida de los desarrolladores de PHP, porque gracias a los enums podremos ahorrarnos comprobaciones de valores y bugs muy molestos, delegando esta tarea en el propio lenguaje.

Desde el equipo de desarrollo de acceseo os recomendamos profundizar en los detalles de esta nueva funcionalidad, a través de la documentación oficial enlazada en la cabecera para poder aprovecharla al máximo desde el primer día.

Noreturn return type (rfc)


En PHP 8.1 se añadirá un nuevo tipo de retorno con la palabra clave noreturn, especificando que en el método no habrá retorno de ningún valor y que siempre se lanzará una excepción o se finalizará la ejecución mediante die o exit.

Puede parecer un poco confuso, ya que actualmente contamos con el tipo de retorno void, en el caso de noreturn, lo que se garantiza es la finalización de la ejecución de la función mediante una excepción, die o exit; en ningún caso podrá finalizar con return. Tampoco nos permitirá funciones con un return implícito, es decir, en las que no se lance una excepción o haya una llamada a die/exit.

Fibers (rfc)

Las fibras son un concepto similar al de los hilos en computación, se trata de una alternativa ligera a los hilos y gestionada por el propio programa, a diferencia de los hilos que son gestionados por el sistema operativo. Con la implementación de esta funcionalidad en el lenguaje se pretende conseguir una base sólida para las librerías y frameworks, que usan modelos de concurrencia haciendo así que no sean necesarias implementaciones propias de cada uno de los proyectos.

En este caso, se trata de una funcionalidad que probablemente no formará parte de nuestro día a día a no ser que tengamos entre manos desarrollos muy específicos centrados en concurrencia sino más bien enfocados a proyectos como ReactPHP o Amp.

Al tratarse de la primera implementación, es muy probable que en las próximas versiones de estas librerías y frameworks vayamos viendo como se extiende el uso de las fibras y cómo el lenguaje continúa mejorando en este apartado.

Readonly properties (rfc)


Se trata de otra funcionalidad especialmente interesante para los que trabajamos fundamentalmente en el desarrollo y mantenimiento de aplicaciones con PHP. En este caso el lenguaje añade la palabra reservada readonly, que nos permitirá indicar que una propiedad es de solo lectura, además como podemos ver en el ejemplo se puede combinar con la funcionalidad conocida como constructor property promotion y declarar directamente la propiedad y el flag en el constructor.

Cuando se utilice el flag readonly el valor de la propiedad solo se podrá escribir una vez, sin importar si es en el constructor o en otro método siempre que la inicialización se encuentre en el marco de la clase.
Por ejemplo no podremos asignar el valor de una propiedad pública desde fuera de la clase como en el ejemplo a continuación.

Final class constants (rfc)


A partir de la versión 8.1 el lenguaje soporta el uso del flag final en la definición de constantes de una clase. Hasta ahora era posible sobreescribirlas en las clases hijas. A partir de ahora si la constante definida en una clase o interfaz está marcada como final no podrá sobreescribirse en una subclase.

New in initializers (rfc)

El lenguaje permite desde la versión 8.1 el uso de expresiones new en nuevos lugares como la definiciones del valor por defecto para los parámetros, los parámetros de un atributo o la inicialización de variables estáticas. En nuestro caso, y como usuarios de Symfony, vemos el mayor potencial de esta funcionalidad al combinarlo con los atributos.

Los frameworks PHP principales han adoptado el uso de atributos para sustituir a las anotaciones desde su salida pero había un inconveniente: No era posible anidar atributos. Este cambio habilita la migración a atributos de anotaciones como Collection en la validación de Symfony que implican el uso de otras validaciones anidadas. Os dejamos un artículo reciente en el blog oficial de Symfony para con los detalles acerca de esta novedad.

array_is_list (rfc)

Por último una pequeña función que nos puede ser muy útil en determinados contextos, array_is_list devolverá true o false dependiendo de si se cumple la siguiente condición: Que las claves coincidan con la lista 0 … count($array)-1, en caso de no empezar por 0 o de que falte alguna clave nos devolverá false.

 

Este ha sido nuestro repaso a las que consideramos las funcionalidades más interesantes que tendremos disponibles a partir del 25 de noviembre con PHP 8.1. Podéis consultar el resto de RFCs implementados en la rama 8.1 en la sección correspondiente de la web oficial.

Comparte
¿Quieres más información?
Ponte en contacto con nosotros.
Picture of Christian Córdoba
Christian Córdoba
Chief Technology Officer (CTO) / Backend developer - Departamento de desarrollo

Enviar Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Suscríbete a nuestra newsletter
para estar al día en el mundo online
¿Tienes alguna incidencia?

Cuéntanos qué ocurre
y nos pondremos con ello lo antes posible.

    Este sitio está protegido por reCAPTCHA, y la Política de privacidad y Términos de servicio de Google.

    ¡Cuéntanos tus ideas!
    +34 96 653 19 14
    info@acceseo.com

      Este sitio está protegido por reCAPTCHA, y la Política de privacidad y Términos de servicio de Google.