Novedades de PHP 7.3

Todas las novedades de la versión 7.3 de PHP

Image for post
Image for post

Hoy mientras comía me he visto esta charla de Rasmus Lerdorf (el creador de PHP) en la que habla de las novedades que trae la versión 7.3 de PHP y he decidido resumir en este artículo los principales puntos de la misma:

Os recomiendo que veáis al menos los primeros 10 minutos ya que en ellos cuenta cómo se le ocurrió desarrollar PHP y alguna anécdota muy interesante (por ejemplo cómo surgió la instrucción LIMIT de MySQL).

Dicho esto, veamos las novedades!

Flexible Heredoc

Hasta ahora, la sintaxis heredoc era bastante rígida lo cual provocaba que muchos desarrolladores no la empleasen debido a que habitualmente conllevaba una peor legibilidad del código que la contenía.

Con la llegada de PHP 7.3, se introducen dos nuevas mejoras para esta sintaxis:

  • La posibilidad de tabular la primera línea
  • Se elimina la necesidad de introducir una nueva línea al final del marcador de cierre.

Lo primero permite pasar de:

a ésto:

Mientras que lo segundo nos permite evitar tener que añadir una nueva línea una vez que cerramos el heredoc:

Asignación por referencia con list

Con PHP 7.1 llegó la nueva sintaxis que permitía desestructurar arrays del mismo modo que hacemos en javascript:

Sin embargo no podíamos asignar por referencia, cosa que ahora en PHP 7.3 sí podemos:

Trailing comma permitida en las llamadas a funciones

Hasta ahora, esto daba fallo:

cosa que ahora es permitido.

Sin embargo, ésto:

todavía sigue dando error de sintaxis.

fpm_get_status()

La nueva llamada fpm_get_status nos permite acceder a las estadísticas de fpm de una manera muy sencilla por si necesitamos montar un dashboard con ellas. Muy muy útil la verdad.

is_countable

PHP 7 es bastante estricto en lo que se refiere a la función count , por lo que antes de emplearla era necesario escribir algo de este estilo:

para evitar fallos en tiempo de ejecución con variables que no pudieran contarse.

Ahora tenemos un shortcut para esa comprobación:

array_key_first() y array_key_last()

Estas dos nuevas funciones nos permiten extraer la primera y la última clave de un array:

JSON Exception

Ahora es posible validar un json mediante la combinación de un bloque try/catch y la flag JSON_THROW_ON_ERROR , lo cual nos permite escribir un código similar a éste:

Mejoras en rendimiento

Esta nueva versión, si bien no trae el increíble salto que supuso el cambio de PHP 5 a PHP7, sí que supone una pequeña mejora con respecto a PHP 7.2 como podéis ver en el gráfico:

¡Ojo! Soporte de versiones

Con la llegada de PHP 7.3 es necesario recordar que algunas versiones anteriores están cerca de quedarse obsoletas.

  • Las versiones 5.6 y 7.0 dejan de recibir actualizaciones de seguridad
  • La versión 7.1 será mantenida hasta finales de este año 2019
  • La versión 7.2 será mantenida hasta finales de 2020

De modo que si tenéis que configurar un nuevo proyecto con Symfony/Lavarel o cualquier otro framework que use PHP yo me decantaría como poco por la 7.2 para “despreocuparnos” en lo que a mantenimiento de PHP se refiere.

Optimizaciones de la OPCache

A modo de curiosidad, desde PHP 7.2 OPCache es capaz de realizar ciertas optimizaciones gracias a la optimización de los algoritmos encargados de detectar DCE (Dead Code Elimination). Aquí tenéis un ejemplo:

Y para terminar… lo que está por llegar

La siguiente versión de PHP (7.4) nos traerá de nuevo importantes novedades, algunas de ellas ya han sido aceptadas y otras están todavía en la fase de revisión.

No obstante, seguramente la más importante de ellas sea la posibilidad de tipar las propiedades de nuestras clases:

y la de realizar un preloading de ciertos archivos PHP en el arranque del servidor, lo cual acercará mucho el rendimiento de estos archivos a las extensiones nativas escritas en C.

Os seguiré contando conforme se vayan confirmando!

¿Quieres recibir más artículos como este?

Suscríbete a nuestra newsletter:

Entre paseo y paseo con Simba desarrollo en Symfony y React

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store