Hace una semana y algunos días, día 26 de noviembre de 2020 la comunidad de desarrolladores de PHP celebró el lanzamiento de una de las versiones más esperadas, del lenguaje de programación, en los últimos años: PHP 8.

PHP 8 - Released!

Es una actualización importante según php.net, porque contiene “nuevos recursos y optimizaciones que incluyen argumentos nombrados, tipos de uniones, atributos, promoción de propiedades constructivas, expresiones match, el operador nullsafe,” el tan deseado compilador JIT, “mejoras en el sistema de tipos, manejo de errores”, etc, etc…

La verdad es que estos nuevos recursos me entusiasman, ¿y a ti? ¿Sigues pensando que PHP ha muerto, o pensando en el futuro que tiene como lenguaje de programación?

Miremos juntos 8 de estos nuevos recursos de PHP 8, compararemos cómo tenías que programar determinada funcionalidad en PHP 7 y como lo harás ahora en PHP 8.

1. El Operador Nullsafe (RFC)

Uno de los problemas del operador de fusión nula es que no funciona en llamadas a métodos. Necesitas, por ejemplo, verificaciones intermedias y si en PHP  7 tenías que verificar condiciones nulas, que podrían ser infinitas y a veces absurdas,  ahora puedes usar una cadena de llamadas con nullsafe,  y tener un comportamiento parecido a la fusión nula en los métodos. Si falla la “evaluación de un elemento, se aborda la ejecución de toda cadena, y la cadena es evaluada como nula”.  

Nota personal: si esto no te entusiasma, no necesitas seguir leyendo. Pero mira el ejemplo de php.net:

Verificación de condiciones nulas en PHP 7
Operador Nullsafe en PHP 8

2. Argumentos nombrados (RFC)

Los argumentos nombrados te permiten pasar valores a una función, especificando el nombre del valor. De esta forma puedes olvidarte del orden y omitir parámetros opcionales. Además los argumentos se documentan automáticamente. Mira el ejemplo:

Parámetros obligatorios en PHP 7
Parámetros opcionales con argumentos nombrados en PHP 8
Otro ejemplo de parámetros opcionales con argumentos nombrados en PHP 8

3. Atributos (RFC)

Los atributos en PHP son lo que en otros lenguajes, o frameworks se conoce como annotations. PHP 8 y te permite agregar metadatos estructurados con el sintax nativo de PHP a las clases, en vez de anotaciones en PHPDoc. ¿Cómo lo ves?

Annotations en PHP 7
Atributos en PHP 8

4.Expresiones match (RFC)

Las expresiones match pueden ser vistas como el hermano o la hermana de la expresión switch, pues son expresiones similares. Las expresiones match pueden ser almacenadas como variables o devueltas (pueden devolver valores), no necesitan delaciariones break de interrupción, pueden combinar condiciones, hacen comparaciones de tipo estrictas, y no hacen ningún tipo de coerción. Mira este ejemplo:

Expresión switch en PHP 7
Expresión match en PHP 8

5. Promoción de propiedades constructivas (RFC)

La “promoción de propiedades constructivas” agrega “azúcar sintáctico” para crear objetos de valor u objetos de transferencia de datos. Ahora puedes combinar las propiedades de clase y un constructor para ellas, todo en uno. Como puedes ver en el siguiente ejemplo, estamos hablando de menos código repetitivo “para definir e iniciar una propiedad”. ¿Qué te parece?

Propiedades y constructor en PHP 7
Propiedades y constructor en PHP 8

6. Compilador JIT (traducciones dinámicas)

El compilador JIT - just in time - promete grandes mejoras a nivel de rendimiento. Pero debes saber que no siempre dentro del contexto de las peticiones web. Con PHP 8 tienes 2 motores de compilación JIT: Function JIT y Transit JIT, siendo el Transit JIT el que  tiene mejor rendimiento, 3 veces mejor en benchamarks sintéticos en algunos tipos de aplicaciones.

Mira la siguiente comparación:

Comparación de PHP 8 sin JIT, con Tracing JIT y con Function JIT

Puedes leer más sobre JIT en el siguiente artículo:

7. Tipos de unión (RFC)

Los “tipos de unión” pueden ser útiles en muchos casos, debido a la naturaleza de tipo dinámico de PHP. Los tipos de unión son una colección de dos o más tipos que indican que se puede utilizar cualquiera de los dos.  En vez de combinar tipos en anotaciones en PHPDoc, puedes utilizar una declaración de tipo unión nativa y esta será válida en el momento de ejecución.

Tipos en anotaciones en PHPDoc de PHP 7
Declaración de tipo unión nativa en PHP 8

Ten en cuenta que void nunca puede ser parte de un tipo de unión, ya que indica “ningún valor de retorno”.

8. Comparaciones inteligentes entre “strings” y  números (RFC)

Este RFC soluciona el caso en el que en PHP 0 == “foo” resulta verdadero (true). Ahora, cuando comparas a un “string” numérico, PHP 8 utiliza una comparación numérica. Si no, convierte el número en string y usa la comparación de cadenas.

Comparación confusa en PHP 7
Comparación inteligente en PHP 8

Los recursos comentados en este artículo son solamente algunas de las mejoras que trae PHP 8. Existen muchas otras, que vale la pena tener en cuenta, como por ejemplo:

  • Tipos de errores consistentes para funciones internas
  • Mejoras en el sistema de tipos y gestión de errores
  • Verificaciones de tipo más estrictas para operadores aritméticos/bit a bit
  • Validación del método trait abstracto
  • Firmas correctas de métodos mágicos
  • Advertencias de motor reclasificadas
  • Objetos opacos en vez de recursos para Curl, Gd, Sockets, OpenSSL, XMLWriter y XML

Te animo a revisar las notas de lanzamiento de PHP 8 en el sitio oficial de PHP, si quieres conocer a fondo estos nuevos recursos.

Conclusión

¿Qué te parecen estas innovaciones? La verdad es que a mi me parecen muy interesantes e importantes para el futuro de PHP. Además, tengo la sensación que aquella sensación - perdona la redundancia - de estar escribiendo mucho código para una funcionalidad sencilla tiende a desaparecer. ¿Cómo lo ves?

Sin embargo, si estás pensando en utilizar estos nuevos recursos en tu proyecto actual, recuerda que estamos hablando de una nueva versión principal, y tendrías que cambiar antes tu código y adaptarlo para poder funcionar en PHP 8. Symfony y Drupal ya están en ello,¿y tú? ¡Coméntalo abajo!

Foto: Hitesh Choudhary de Pixabay

Fuente: