Actualizado el miércoles, 11 enero, 2023
PHP 8.2 ya está disponible en nuestros hostings, por eso queremos que conozcas sus novedades. Te hacemos un repaso tanto por las características que añade, como por las deprecaciones con las que te encontrarás.
Índice de contenidos
Por qué es importante acceder a las últimas versiones de software
Es muy importante que tu proveedora de hosting te dé la posibilidad de elegir entre las últimas versiones del sofware que utilices. Esto tiene dos ventajas fundamentales:
- Obtener las últimas mejoras de rendimiento y seguridad. En las últimas versiones siempre se hacen parches que ayudan a que tu hosting funcione mucho mejor.
- Mantener una retrocompatibilidad con el código antiguo. En dinahosting puedes elegir la versión que tú quieras mediante FPM. Un poco más abajo te lo explicamos con más detalle.
Novedades de PHP 8.2
Aquí tienes un resumen con los cambios más importante que ha traído consigo la versión PHP 8.2. También te dejamos enlazado el anuncio oficial de PHP, por si quieres echarle un ojo.
Mejoras de rendimiento
De acuerdo con los datos de PHPBench, tu código se ejecutará un 2,5 % más rápido respecto a PHP 8.1. Este dato a priori puede parecer bajo, pero estaría bien recordar que PHP 8.1 es un 20 % más rápido que PHP 7.0.
Al mismo tiempo, el consumo de memoria también es ligeramente inferior.
Nuevas clases readonly
En PHP 8.1 se introdujeron las propiedades readonly, y ahora con PHP 8.2 se introducen las clases readonly. Crear una clase de este tipo implica que todas sus propiedades serán también readonly, por lo que no tendrás que definirlas individualmente, a la vez que la creación de propiedades dinámicas en dicha clase no estará permitida.
Para que lo veas con un ejemplo, en lugar de definir tu clase de este modo:
class Example{
public function __construct(
public readonly string $prop1,
public readonly string $prop2
) {}
}
Podrás hacerlo así:
readonly class Example{
public function __construct(
public string $prop1,
public string $prop2
) {}
}
Nuevos tipos standalone
En esta nueva versión de PHP se han incluido como tipos standalone tres nuevos valores: true, false y null. Esto te permitirá utilizarlos como salida de aquellas funciones que devuelvan siempre un booleano o un nulo. Puedes definir tus funciones así:
function alwaysTrue(): true {}
function alwaysFalse(): false {}
function alwaysNull(): null {}
Nuevos tipos DNF
Utilizando esta nueva característica de PHP 8.2, podrás combinar los tipos union e intersection siguiendo la regla de que los tipos de esta última tendrán que ir agrupados con paréntesis. A priori, la mayor utilidad de esto será tener tipos intersection nullables. Un ejemplo de código sería el siguiente:
function testDNF( (Tipo1&Tipo2) | null $property) {
return $property;
}
Nueva extensión random
En PHP 8.2 se ha introducido un nuevo generador de números aleatorios que es más rápido, más seguro y que no depende del estado global, lo que facilitará la detección de bugs. Este generador incluye una nueva API que proporciona diferentes clases de generación de números aleatorios con base en algoritmos más modernos que utilizan semillas diferentes para independizarlos.
La clase que se encarga de esta generación se llama Randomizer, y acepta como parámetro el tipo de motor de generación que queremos utilizar. Por ejemplo:
new Random\Randomizer(
new Random\Engine\Secure()
);
Constantes en traits
Otra de las novedades de PHP 8.2. A partir de ahora, podrás acceder a las constantes definidas en un trait a través de la clase que lo utiliza, pero no a través del propio trait, tanto desde dentro como desde fuera del mismo. Un ejemplo sería el siguiente:
trait Example {
public function EXAMPLE_CONST = 1;
}
class UsageExample{
use Example;
}
UsageExample::EXAMPLE_CONST;
Esta última línea nos devolvería el valor definido en la constante dentro del trait, es decir, 1.
Deprecado de propiedades dinámicas
El uso de propiedades dinámicas de clase ha sido deprecado en esta nueva versión 8.2, y en la futura versión 9.0 devolverá un ErrorException. Debido a que hay muchas aplicaciones y componentes que dependen del uso de propiedades dinámicas, se ha introducido un atributo de clase “AllowDynamicProperties”, que permite continuar utilizándolas.
Aquí tenemos un ejemplo de qué devolvería un aviso de deprecado de propiedades dinámicas:
class Example {
private int $id;
}
$example = new Example();
$example->name = 'test_name';
Esta notificación desaparecería si incluimos el atributo de clase indicado anteriormente:
#[AllowDynamicProperties]
class Example {
private int $id;
}
$example = new Example();
$example->name = 'test_name';
Deprecado de funciones de codificación utf8
Las funciones utf8_encode y utf8_decode pasarán a estar deprecadas a partir de PHP 8.2 y serán borradas en PHP 9.0. Esto es debido a que el nombre es confuso, pues únicamente convierte entre dos codificaciones (ISO-8859-1 y UTF-8) y puede dar lugar a pensar que acepta más transformaciones.
Como alternativa se recomienda el uso de la función mb_convert_encoding()
Deprecado de interpolación de cadenas
Pese a que PHP tiene diferentes formas de embeber variables en strings, desde la versión 8.2 no se podrán utilizar dos de ellas que implican el uso de llaves. Más concretamente, las siguientes líneas darían avisos de deprecado:
"Test ${example}";
"Test ${(example)}";
Sin embargo, estos otros formatos continuarán pudiendo ser usados:
"Test {example}";
"Test $example":
Actualiza ahora tu versión de PHP
Si quieres probar PHP 8.2, puedes actualizar ya mismo a esta versión:
- En hostings con PHP-FPM
Solo tienes que entrar en tu Panel de Control, al apartado Hosting > Servidor > PHP > Versión PHP. Ahí eliges PHP 8.2, o la versión que prefieras.
- En hostings sin PHP-FPM
En este caso tienes que migrarlo de servidor, a una imagen que sí lo tenga. Aquí te contamos al detalle cómo hacer esta migración. Recuerda que en Soporte podemos ayudarte 24/7 con cualquier duda que tengas, solo tienes que llamarnos gratis al 900 854 000 o escribirnos por chat o email.
¿Has probado ya PHP 8.2? ¿Qué te parece esta nueva versión? ¡Cuéntanoslo en los comentarios!
Deja una respuesta