Novedades PHP 8.2

php 8.2.jpg
Solucionex
24
Oct 22

Con la llegada de PHP 8.2 a la vuelta de la esquina (24 de noviembre de 2022) vamos a aprovechar y darle un repaso a sus novedades.

Clases de solo lectura (readonly)

El modificador readonly nos permite declarar variables que son inmutables, es decir, su valor no puede ser cambiado una vez inicializado.
Después de que en la versión 8.1 se añadieran las propiedades de solo lectura, ahora es el turno de las clases. Añadir el modificador readonly a una clase va a provocar que todas las propiedades de dicha clase sean inmutables.

class User
{
    public function __construct(
        public readonly string $name, 
        public readonly Author $age
    ) {}
}

readonly class User
{
    public function __construct(
        public string $name, 
        public Author $age
    ) {}
}

Además, cuando añadimos el modificador readonly a una clase prevendrá de que se pueda añadir propiedades dinámicas a dicha clase.

$user->surname = 'surname'; // Error

Igualmente, hay que tener en cuenta que las propiedades dinámicas estarán deprecadas en esta versión, y a partir de PHP 9.0, lanzará una excepción ErrorException.

Null, True y false como tipados stand-alone.

Hay una larga lista de motivaciones que nos ha llevado a la comunidad a requerir esta funcionalidad, y por fin será integrada en PHP 8.2.
Esta funcionalidad nos permitirá devolver null, true o false en una función sin necesidad de necesitar otro valor.


function getNull(): null
{
    return null;
}

 

Nueva extensión Random

PHP 8.2 añade un random number generator que soluciona muchísimos problemas respecto al anterior, en temas como el rendimiento, seguridad y es más fácil de mantener.

Para más información podemos visitar el siguiente enlace.

 

Usar constantes en los Rasgos (Traits).

Ahora se pueden usar constantes en los Traits.


trait HolaMundo 
{
    public const MESSAGE = 'Hola Mundo!';
 
    public function showMessage(): string 
    {
        return self::MESSAGE;
    }
}

Tenemos que tener en cuenta que no se podrá acceder a la constante directamente llamando al trait, pero si llamando a la clase.

 

Atributo AllowDynamicProperties

Antes hemos hablado de que no se podrán añadir propiedades dinámicas a las clases, pues bien, con este atributo podremos evitar que nos salga el aviso de que las propiedades dinámicas están obsoletas.

 

Interpolación con Strings ${} ahora está obsoleto.

A partir de la versión 8.2, ya no se podrán interpolar strings de la siguiente manera:


${variable}

Que quede claro que sí que se podrá seguir usando las dos siguientes formas de interpolar:


$variable
{$variable}

 

utf8_encoded() y utf8_decoded() estarán obsoletos.

A partir de la versión 8.2 estas funciones mostrarán un mensaje de que están obsoletas. La alternativa sería la función mb_convert_encoding().

 

str_split ahora devuelve un array vacío cuando se le pasa un string vacío

El comportamiento que tenía antes str_split era un poco raro; cuando le pasamos como parámetro un string vacío, esta función nos retorna un array con un string vacío. A partir de la versión 8.2 nos retornará un Array vacío.

 

Solo hemos enumerado algunas de las muchas novedades que se han añadido a la versión de php 8.2, y que, poco a poco, podremos incorporar a nuestro código para agilizar y facilitar nuestro tiempo programando en PHP.

 

Fuentes: wiki.php.net, stitcher.io, php.watch