Pocos meses después de que PHP cumpliera 25 años, acaba de lanzarse su versión 8.0. PHP sigue siendo el lenguaje de programación más usado en Internet a la hora de generar páginas web dinámicas (está detrás del 79% de las mismas), pese a la pujanza de tecnologías como Node.js o ASP.NET.
La anterior versión de PHP, la 7.4 (que seguirá recibiendo soporte hasta el 6 de diciembre de 2021) aportó notables mejoras de rendimiento, un apartado en el que también destacará la 8.0. Pero esta viene acompañada de muchas más novedades:
Compilador JIT
Sin ninguna duda, la principal novedad de PHP 8 es la introducción del compilador JIT (Just in Time), que permitirá compilar ciertas partes del código sobre la marcha, en tiempo de ejecución.
Esta funcionalidad, que estuvo a punto de ser incluida en la versión 7.4, lleva años siendo desarrollada y supone un gran cambio para el ecosistema PHP.
Cuando actualices tu actual instalación PHP, el compilador JIT aparecerá deshabilitado por defecto, pero podrá habilitarse desde el archivo php.ini, permitirá almacenar el código nativo de los archivos PHP en una región adicional de la memoria compartida OPcache.
Las pruebas preliminares confirmaron que la activación del compilador JIT permite multiplicar por cuatro el rendimiento de algunos tipos de tareas, especialmente aquellas que exigen muchos recursos de la CPU.
Lo cierto es que de esto, más que beneficiar a las clases de aplicaciones webs típicamente vinculadas a PHP (como podría ser, por ejemplo, WordPress), lo que hace es sobre todo abrir nuevas posibilidades a PHP como lenguaje de programación de uso general, permitiendo darle uso en campos como el machine learning.
Otros cambios
PHP 8 incorpora también diversos cambios a nivel sintáctico, pequeños pero relevantes, como:
- La introducción de argumentos con nombre, que nos liberan de hacer coincidir el orden de los parámetros con la lista de parámetros de los métodos usados.
- Propagación de propiedades automática: Actualmente, cuando queremos definir una propiedad en PHP estamos obligados a repetirla hasta en tres ocasiones antes de empezar a usarla. Pero esta nueva característica nos permite reducir significativamente la cantidad de código usada:
- Soporte para union types: antes de PHP 8, sólo podíamos especificar tipos de unión mediante anotaciones PHPdoc, pero la nueva versión incorporará soporte para los tipos de unión en las firmas de las funciones, ahorrándonos así, de nuevo, bastante código.
- Match expression: PHP incorpora una nueva expresión de coincidencia similar a switch, pero dotada de una semántica más segura, así como de la capacidad de devolver valores.
- Nuevo operador nullsafe: Actualmente, cuando queríamos comprobar en PHP que un getter no devolvía null, estábamos obligados a anidar sucesivos ifs. Pero, a partir de ahora, el primer getter que devuelva null anulará la ejecución de toda la cadena:
- Expresión throw: Hasta ahora, en PHP throw era una declaración, por lo que no resultaba posible usarla en lugares donde sólo se permitiese el uso de una expresión. A partir de ahora, sin embargo, se considerará una expresión.