PHP 8: todo lo que debes saber sobre la nueva actualización

PHP es uno de los lenguajes de programación más fáciles de aprender. Con un buen tutorial de PHP y mucha motivación, en pocas horas puedes escribir tus primeros scripts y ejecutar comandos. La versión actual, PHP 7, ya trajo consigo una gran optimización de la velocidad, lo que aumentó su prestigio. La versión 8.0 supondrá una actualización muy importante para este lenguaje de código abierto.


El desarrollador Brent Roose publicó recientemente un anuncio con las novedades que presentaría la nueva versión de PHP. Puesto que aún se está trabajando en esta actualización, es posible que se anuncien más cambios al respecto en los próximos meses hasta su lanzamiento.


¿Cuándo se lanzará PHP 8?


Después de un largo período de incertidumbre, los desarrolladores han anunciado que el lanzamiento de PHP 8 tendrá lugar el 26 de noviembre de 2020. Esto coincide con el ciclo habitual de 3 años de PHP. Además, en diciembre del 2019 se publicó PHP 7.4 y PHP 7.1 fue suspendido. Sin embargo, muchas páginas web escritas en PHP utilizan aún una versión antigua, que muy pronto dejará de ser compatible. Mantener el código de la página web actualizado y usar las versiones nuevas de PHP puede traer consigo algunas ventajas. Las nuevas versiones ofrecen más variedad, el rendimiento aumenta considerablemente y el nivel de seguridad es más alto.


¿Habrá complicaciones con los códigos antiguos?


Puesto que PHP 8 es una versión principal, hay que tener en cuenta que algunos códigos antiguos no serán compatibles. La mayoría de los cambios que podrían presentar complicaciones ya estaban obsoletos en las versiones 7.2, 7.3 y 7.4.


Los últimos cambios incluyen:

  • The real type
  • Magic quotes legacy
  • array_key_exists() with objects
  • FILTER_SANITIZE_MAGIC_QUOTES filter
  • Reflection export() methods
  • mb_strrpos() with encoding as 3rd argument
  • implode() parameter order mix
  • Unbinding $this from non-static closures
  • hebrevc() function
  • convert_cyr_string() function
  • money_format() function
  • ezmlm_hash() function
  • restore_include_path() function
  • allow_url_include ini directive


Si has mantenido tu código actualizado, no tendrás ningún problema, incluso teniendo la nueva actualización cambios incompatibles con versiones anteriores. En esta publicación en GitHub puedes encontrar una lista completa con todos los cambios.

Nuevas características de PHP 8


Se espera que la nueva versión de PHP presente nuevas características que ampliarán las posibilidades de los desarrolladores web.


Compilador JIT


La mayor novedad será el compilador JIT, que mejorará considerablemente el rendimiento. PHP no se compila, sino que se interpreta línea por línea. El compilador JIT (Just in Time) compilaría parte del código durante el tiempo de ejecución, por lo que funcionaría de manera muy similar a una versión en caché del código. Con ello, el rendimiento debería mejorar considerablemente.


Esta característica de PHP 8 ya fue probada de manera muy exitosa por Pedro Escudero. Usó un script simple para comparar las versiones 5.3, 7.4 y 8 (con y sin JIT). Para ello, ejecutó el script cien veces en cada versión y calculó el tiempo promedio.


El resultado fueron los siguientes valores:


Aunque la diferencia entre la versión 7.4 y la 8 sin JIT no es muy grande, entre la 7.4 y la 8 con JIT es significativa. El compilador JIT proporciona una mejora del rendimiento de más del 45 %.


La extensión JSON estará siempre activa


En versiones anteriores del lenguaje de scripts, la extensión JSON podía desactivarse de forma opcional. Sin embargo, como JSON es un formato de datos muy importante, los desarrolladores de PHP han decidido dejar la extensión activada todo el tiempo. Esto debería simplificar el trabajo con PHP.


Tipos de unión


Los union types también aparecen en otros lenguajes como C/C++, TypeScript o Haskell. Permiten crear uniones de dos o más tipos de datos, pudiéndose utilizar cualquiera de ellos. En el código, esto se vería de la siguiente manera:


Sin embargo, existe una limitación. Void no puede formar parte de un union type, ya que no devuelve ningún valor. Además, las uniones nullable pueden escribirse con |null o ?, como te mostramos en este ejemplo:


Tipo de retorno estático


Static es un nombre de clase especial y en la nueva versión será un tipo de retorno válido junto a self & parent.


Mapas débiles


En PHP 7.4 ya aparecían los WeakRefs, y ahora con WeakMaps se ofrece una extensión de esta función. WeakMaps y WeakRefs pueden usarse para eliminar objetos, solo si la caché aún referencia a las clases de entidad de los objetos. Esto ofrece una administración de los objetos que ahorra recursos. Un ejemplo sacado de la documentación:


Usar ::class en los objetos


En versiones anteriores se tenía que usar get_class() para asignar una clase a los objetos. Ahora se puede aplicar ::class directamente a los objetos. Esto ayuda a mantener el código más limpio.


Interfaz encadenable


Stringable interface implementa una interfaz automáticamente. Hasta ahora, este paso debía hacerse manualmente. Esto puede hacerse para todas las strings o para aquellas donde __toString() esté implementado. En el código se leería de la siguiente manera:


Convertir DateTime


Con PHP 8 será considerablemente más fácil convertir DateTime. Los desarrolladores han añadido DateTime::createFromInterface() y DatetimeImmutable::createFromInterface(). De esta manera DateTime y DateTimeImmutable se podrán convertirde uno al otro.


fdiv


Con fdiv será posible una división por 0. Ahora se obtiene INF, -ING o NAN como valor de retorno.


Anotaciones de tipo


La nueva versión incluirá anotaciones de tipo correctas para todas las funciones y métodos internos.


Errores de tipo


Anteriormente, solo las funciones definidas por el usuario activaban los TypeErrors. Las funciones internas emitían una advertencia y daban null. Con PHP 8, las funciones internas también producirán TypeErrors.


Reclassified engine warnings


Hasta ahora había muchos errores que solo emitían un aviso. Esto será actualizado. Aquí encontrarás un listado completo de los nuevos mensajes de error en PHP.


Default error reporting level


Los errores que hasta ahora eran ignorados sin generar un aviso, se presentarán como E_ALL, E_NOTICE y E_DEPRECATED. Estos errores ya existían antes de la versión 8, pero no se notificaban visiblemente.


@ ya no suprimirá los errores fatales


Esta nueva característica también ayudará en la detección de errores. En lugar de suprimirlos con el operador @ como se hacía hasta ahora, se deberá utilizar display_errors=Off en el servidor.


Orden de los operadores de concatenación


Esta función ya se había introducido en PHP 7.4 y ahora será plenamente funcional. PHP reaccionará ahora de manera más inteligente ante múltiples operadores. Como ejemplo te mostramos el siguiente código:


Hasta ahora, PHP interpretaba


como


Ahora, PHP 8 lo interpretará como


Reflection


Las firmas se cambiarán. Anteriormente, Reflection se presentaba de la siguiente manera:


En PHP 8, se escribirá tal que:


Para utilizar PHP 7 y PHP 8 simultaneamente, se debe proceder así:


Estas características de PHP 8 están ya confirmadas. Aún así, se esperan más novedades en los meses previos a su lanzamiento.



Fuente: Ionos


¿Buscas desarrollar tus capacidades, formándote en PHP? En EducaciónIT tenemos un curso para ti: Programación Web en PHP. Aquí dominarás la tecnología más utilizada para construir sitios y darás tus primeros pasos para convertirte en un Web Developer, aprendiendo las herramientas básicas necesarias para crear tu sitio en internet.

Comments

Deja una respuesta

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.