PHP 8

Desde hace 5 años que PHP no recibía una actualización importante. En 2015 salió PHP 7 y desde entonces, estos últimos años se han implementado actualizaciones menores. No obstante hace unos meses se publicó PHP 8, con características nuevas y optimizaciones que incluyen argumentos con nombre, operadores nullsafe, JIT y mejoras en el sistema de escritura, manejo de errores y consistencia.

Hay muchos usuarios que al hacer una web, creen que mientras tengan actualizado su cms (wordpress, prestashop, magento…) con sus respectivos plugins o incluso una web a medida donde no hay elementos visibles a actualizar, estarán al día con la última tecnología. Esto es completamente erróneo.

Cuando se crea una web, se escoge (por lo general) la versión de PHP más actual. No obstante, ésta versión no se actualiza de forma automática, ni aunque se tenga contratado un hosting administrado. Ésto ocurre porque el sistema no sabe si estás adaptando el contenido de la web a las nuevas versiones de PHP, por lo que deja por defecto la versión que se escogió a la hora de la contratación.

Esto acaba siendo un problema, ya que PHP tiene soporte durante 2 años y posteriormente tiene 1 año de actualizaciones críticas. Así que pasados 3 años, si no hemos actualizado nuestra versión de PHP, estaremos trabajando en un sistema obsoleto. Los CMS y plugins actuales, ya advierten cuando detectan una versión obsoleta de PHP, incluso dejan de actualizarse ya que las nuevas versiones del CMS y plugins utilizan funcionalidades más modernas que no están soportadas por antiguas versiones de PHP.

En PUKKAS nos encargamos de mantener actualizados nuestros entornos de desarrollo y los nuevos proyectos ya los trabajamos de base con PHP 8 en servidores cloud. En los proyectos ya desarrollados realizamos tareas de actualización de PHP, dentro del proceso global de actualización que también incluye el CMS, los plugins y otras funcionalidades.

A continuación os dejamos con una tabla que muestra los ciclos de vida de cada versión de PHP:

Aparte de la seguridad y optimizaciones que tiene PHP 8, hay ciertos elementos que harán la vida mucho más sencilla a los programadores. Se han creado y simplificado muchas funcionalidades y además, se ha añadido por primera vez en PHP, un compilador JIT.

Compliador JIT

PHP es un lenguaje de programación que no se compila, sino que se lee línea por línea. Ésto cambia con la creación del motor de compilador JIT (Just in Time) que compila la mayor parte del código cuando éste se ejecuta (y no antes de ejecutarse, como lo hace Java por ejemplo). Podríamos llegar a decir que JIT es una evolución de la funcionalidad OPCache, que nos permetía guardar instrucciones en caché.

Pedro Escudero, publicó un artículo donde analizaba el rendimiento de las diferentes versiones de PHP y la implementación de JIT en PHP 8 mediante unos scripts de ordenación. El código está disponible en GIT y se utiliza una máquina Docker para hacer la prueba, por lo que podemos llegar a probar nosotros mismos éstas pruebas de rendimiento. El resultado que obtuvo fue notable.

  • PHP 5.3. Tiempo respuesta:  0,64574003219604s
  • PHP 7.4. Tiempo respuesta:  0,10253500938416s
  • PHP  8 (sin JIT). Tiempo respuesta:  0,098223924636841s
  • PHP  8 (con JIT). Tiempo respuesta:  0,053637981414795s

Si analizamos éstos resultados, vemos que la mejora de rendimiento al utilizar JIT es de un 40% comparando versiones actuales de PHP y de una mejora del 100% comparada con una versión de PHP de hace 5 años.

JIT puede ser beneficioso en la utilización del lenguaje de PHP para proyectos complejos que puedan utilizar Big Data o Machine Learning.

Otras características

A continuación os comentaremos algunas de las características más detacables que lleva consigo PHP 8. Podéis encontrar el listado completo aquí.

Operador nullsafe

$ciudad = null;

if ($sesion !== null) {

$usuario = $sesion->usuario;

if ($usuario !== null) {

$direccion = $usuario->getDireccion();

if ($direccion !== null) {

$ciudad = $direccion->ciudad;

}

}

}

Con el código anterior se comprueba si una una propiedad de un objeto o un método devuelve o no un valor nulo. Como podéis comprobar es bastante engorroso: Para obtener la ciudad de un usuario, se comprueba si el usuario ha iniciado sesión, si éste usuario existe y si el usuario tiene asignada una dirección… la cadena puede llegar a ser muy larga. Ésto se ha simplificado de tal manera que con una sola línea puedas hacer éstas comprobaciones y si PHP encuentra que uno de los valores previos es nulo, no continúe con la ejecución:

$ciudad = $sesion?->usuario?->getDireccion()?->ciudad;

Parámetros con nombre

Aunque otros lenguajes de programación lo llevasen implementado desde hace años, PHP lo cababa de implementar. Con ésta mejora, los argumentos con nombre permiten pasar argumentos a una función teniendo en cuenta del nombre del parámetro, en lugar de la posición del parámetro. Esto hace que el significado del argumento se auto-documente, que los argumentos sean independientes del orden y permite omitir los valores predeterminados de forma arbitraria.

De ésta manera, podemos definir una función PHP que nos devuelva el nombre, email y teléfono del usuario:

function formularioRegistro($nombre, $email, $telefono){

return «Bienvenido, $nombre. Tu email es $email y tu teléfono es $telefono)»;

}

Y llamarla desde PHP 8 mediante el nombre de los parámetros.

echo formularioRegistro(

telefono: ‘212-970-4133’,
nombre: ‘Tony Stark’,
email: ‘ironman@avengers.com’

);

Función fdiv

Ahora es posible dividir un número entre 0 y obtener un resultado más esclarecedor: INF, -ING o NAN. Aquí un ejemplo:

  • fdiv(5.7, 1.3);
    • 4.384615384615385
  • fdiv(4, 2);
    • 2
  • fdiv(1.0, 0.0);
    • INF
  • fdiv(-1.0, 0.0);
    • -INF
  • fdiv(0.0, 0.0);
    • NAN

Resumen

Como hemos podido comprobar, PHP 8 nos ofrece una cantidad de optimizaciones y características muy interesantes. Ahora es el momento de dar el paso y actualizar nuestros servidores a PHP 8 para poder disfrutar de éstas mejoras y estar al día con un sistema seguro.

Glosario

  • CMS: Del inglés content management system. Se trata de un sistema de gestión de contenidos que nos permite desarrollar una web de una manera más ágil. Hay varios CMS populares como WordPress, Drupal, Joomla o Liferay.
  • Plugins: Programas de otras empresas o usuarios que se integran en nuestra web y nos permiten ampliar sus funcionalidades de una manera rápida y sencilla. 
  • Servidores cloud: Gracias a los servicios en la nube, tendremos un ahorro de costes en el servidor y una gran flexibilidad y escalabilidad
  • GIT: Programa de control de versiones donde podremos almacenar nuestro código así como un historial de todas las modificaciones que se hayan realizado a lo largo del tiempo.
  • Docker: Aplicación que permite a los desarrolladores simplificar y acelerar el flujo de trabajo además de poder llegar a configurar diferentes entornos de programación para cada proyecto.

Julio 2021
Félix Sandoval / Programación y Desarrollo Web