Novedades de PHP 8.2

Los programadores de PHP estamos de enhorabuena, el pasado 8 de diciembre el PHP Group ha hecho pública la última versión del popular lenguaje de programación PHP. ¿No sabes qué es PHP? Pues te lo comento en pocas palabras: es el lenguaje de programación usado en el 77.7% de los sitios web de Internet.

Con la salida de esta versión también debe sumarse a que PHP 7.4 ha dejado de tener soporte y, tal y como lo comentan desde el sitio oficial de PHP

Los usuarios de esta versión deberían actualizar tan pronto como sea posible, ya que podrían estar expuestos a vulnerabilidades de seguridad no solucionadas

Es más, la versión 8.0 sólo tendrá soporte para solucionar errores de seguridad. ¿Usas estas versiones? ¡Actualízate cuanto antes!

Novedades

Esta versión de PHP tiene una lista interesante de novedades:

Clases de solo lectura

Seguro que ya te puedes hacer una idea de lo que se trata. La salida de PHP 8.1 incorporó propiedades de clase de solo lectura, de manera que podríamos escribir:

Las variables públicas se asignan en momento de creación y ya no pueden cambiarse. Pero con las clases de solo lectura, el código anterior quedaría:

Permitir que null, false y true sean tipos por sí mismos

Sabemos que con PHP 8.1 podíamos hacer que nuestras funciones retornasen algo como:

Pero tenían que estar siempre en un tipo en unión. Pero ahora no: las funciones pueden retornar false, true o null.

Que un método sólo retorne null, bien. ¿Pero que solo retorne true? ¿Qué solo retorne false? Pues me cuesta verlo. ¿Se te ocurre un ejemplo de una situación en que un método retorne solo true? ¡Coméntanoslo!

Tipos DNF

Los tipos de forma normal disyuntiva (Disjunctive Normal Form) es el modo que tenemos para definir tipos de datos compuestos usando operadores booleanos & y|.

Por ejemplo, podríamos definir un método así:

Con esto le estamos diciendo a PHP que la función puede retornar un objeto de tipo Human o un objeto que implemente las interfaces Biped y que además implemente Mammal.

Datos sensibles en los backtraces

Los backtraces son muy útiles para darnos información detallada del error que acaba de ocurrir ¿no es cierto?. Ese reporte de errores nos sirve a nosotros, como programadores… pero ¿qué sucedería si esa información es accesible a ojos indeseados?

Os pongo un ejemplo:

¿Qué sucedería si esa función lanzara una excepción? Pues, lo más seguro, es que veamos algo parecido a:

#0 Standard input code(19): payWithCreditCard('8282828282828282', '642', 'Gonzalo' )
#1 {main}
 thrown in Standard input code on line 13

¿Ves lo que yo veo? Correcto, ese tipo de información jamás debería estar disponible.

Para ello, PHP 8.2 ha incluido una anotación: #[\SensitiveParameter] que se antepone a la definición de la variable. Si añadimos esta anotación a nuestro código, quedaría más o menos así:

El resultado de la excepción sería algo parecido a:

#0 Standard input code(16): payWithCreditCard(Object(SensitiveParameterValue), Object(SensitiveParameterValue), 'gonzalo')
#1 {main}
 thrown in Standard input code on line 5

¿Ves como los datos marcados como sensibles han sido sustituidos por Object(SensitiveParameterValue)?

Constantes en Traits

Bueno, esto es bastante sencillo ¿no? Hasta PHP 8.1 solo se podían definir métodos y propiedades en los traits, pero ahora ya puedes incluir constantes a la lista. Recuerda que si la clase que usa ese trait define una constante con el mismo nombre tendremos un fatal error.

Obtener propiedad de los enums en constantes

También es fácil de entender. Anteriormente a PHP 8.2 no podías hacer esto:

Vamos, que no podías definir una constante con un valor concreto de uno de los casos del enum.

Depreciaciones

PHP evoluciona y se moderniza. Y para ello debe deshacerse de cosas que no se usan, que no son muy estándar o que simplemente restan agilidad. Entre las cosas que se han deprecado en esta versión están:

Propiedades dinámicas

Las propiedades dinámicas con aquellas que se crean automáticamente si esa propiedad de la clase no existía.

Por ejemplo:

Esto en PHP 8.2 no se podrá hacer. Si lo haces, PHP lanzará un error de tipo deprecated:

Deprecated: Creation of dynamic property Human::$happy is deprecated in Standard input code on line 8

Los desarrolladores de PHP saben que este cambio puede ser drástico, especialmente para desarrollos y frameworks con mucho recorrido. Por ello se añadió la anotación #[AllowDynamicProperties], para deshabilitar temporalmente errordeprecated. Simplemente escribe esta anotación arriba de la declaración de la clase…

…y ya no habrá error.

Funciones utf8_encode y utf8_decode

Estas dos funciones convierten cadenas en Latin1 a UTF-8 (y vise-versa) por lo que su nombre es poco apropiado. Es mejor usar la familia de funciones mbstring.

Interpolación de cadenas

En PHP hay varias maneras de interpolar una variable en una cadena de texto:

Tendremos un error de tipo deprecated: Deprecated: Using ${var} in strings is deprecated, use {$var} instead.

PHP 8.2 es la última versión del popular lenguaje de programación.

Cambios PHP 8.2

¿Te parecen útiles estos cambios? ¿Te afectarán las funcionalidades que dejarán de existir?

Full-Stack

Picture of Gonzalo Payo

Gonzalo Payo

Entusiasta Programador Fullstack que, a la par, le gusta escribir
Picture of Gonzalo Payo

Gonzalo Payo

Entusiasta Programador Fullstack que, a la par, le gusta escribir

We are HIRING!

What Can We Do