Qué hay de nuevo en PHP 8.2: nuevas características, obsolescencia y corrección de errores

Qué hay de nuevo en PHP 8.2: nuevas características, obsolescencia y corrección de errores

PHP 8.2 está a la vuelta de la esquina. Su lanzamiento está previsto para el 24 de noviembre.

PHP 8.2 tiene como único objetivo facilitar la vida de los desarrolladores. La mayoría de los cambios simplifican el proceso de codificación y desaprueban algunas de las funciones más antiguas. Siempre se recomienda actualizar a la última versión de PHP para maximizar la seguridad de tu sitio y acostumbrarte a la nueva sintaxis.

Veamos todos los cambios que PHP 8.2 está trayendo a la mesa para que puedas decidir si vale la pena hacer el cambio cuando finalmente salga la nueva versión.

Nuevas características de PHP 8.2

En esta sección, repasaremos los cambios y las nuevas funciones introducidas con PHP 8.2.

Nuevas clases de readonly

La nueva propiedad de clase de readonly se publicó con la versión 8.1. PHP 8.2 lo mejora aún más. Ahora, podrás declarar una clase completa como readonly. Al hacerlo, todas las propiedades de esa clase cambiarán a readonlyEsto no funcionará para las propiedades dinámicas: declararlas como readonly generará un error.

Declarar la clase solía verse así:


class ReadOnlyClass
{
public readonly int $number,
public readonly int $anotherNumber
}

Con PHP 8.2, el proceso se ha simplificado completamente:

class ReadOnlyClass
{
public int $number,
public int $anotherNumber
}

Ten en cuenta que no será posible declarar las siguientes características de PHP:

  • Enumeraciones, ya que no pueden contener propiedades en absoluto.
  • Características.
  • Interfaces.

Permitir verdadero, nulo y falso como tipos de standalone

Con PHP 8.0, a los usuarios se les presentó soporte para Union Types. Podrías declarar un tipo como una unión de dos o más tipos. Aunque podrías usar falso y nulo como tipos posibles, no estaba permitido usarlos como tipos de standalone.

Con PHP 8.2, será posible usar falso y nulo como tipos de standalone. Con esta adición, el sistema de tipos de PHP será más descriptivo, ya que podrás declarar con mayor precisión los tipos de devolución, parámetro y propiedad.

Compatibilidad con valores de parámetros sensibles a la redacción

PHP permite a los usuarios rastrear la pila de llamadas en cualquier punto del programa. Es muy útil si deseas depurar una aplicación y ver por qué falló. Sin embargo, algunos seguimientos de pila contienen información confidencial que es posible que desees enmascarar.

PHP 8.2 añadirá un nuevo atributo llamado SensitiveParameter. Evita que se muestre o registre información confidencial cada vez que una aplicación tiene problemas. En la práctica, se verá así:


function passwords(
$publicpassword,
#[\SensitiveParameter] $secretpassword
) {
throw new \Exception('Error');
}
passwords('publicpassword', 'secretpassword');

Nueva función mysqli_execute_query y método mysqli::execute_query

PHP 8.2 presenta una forma más fácil de manejar consultas MySQLi parametrizadas. Con la función mysqli_execute_query($sql, $params) y el método mysqli::execute_query, puedes preparar, enlazar y ejecutar consultas dentro de la misma función. Después de ejecutar con éxito una consulta, se te presentará el objeto mysqli_result.

La función propuesta de RFC se ve así:

foreach ($db->execute_query('SELECT * FROM user WHERE name LIKE ? AND type_id IN (?, ?)', [$name, $type1, $type2]) as $row) {
print_r($row);
}

Permitir constantes en características

Con PHP 8.2, podrás declarar constantes en rasgos. Hasta ahora, las características permitían a los usuarios reutilizar el código definiendo métodos y propiedades. Ahora también será posible declarar constantes en los rasgos.

Aquí hay un ejemplo de propuesta oficial de RFC:


trait Foo {
public const FLAG_1 = 1;
protected const FLAG_2 = 2;
private const FLAG_3 = 2;
public function doFoo(int $flags): void {
if ($flags & self::FLAG_1) {
echo 'Got flag 1';
}
if ($flags & self::FLAG_2) {
echo 'Got flag 2';
}
if ($flags & self::FLAG_3) {
echo 'Got flag 3';
}
}
}

Nuevos tipos de forma normal disyuntiva (DNF)

Con PHP 8.2, podrás utilizar una nueva función de tipos de forma normal disyuntiva (DNF). Es una forma estandarizada de organizar expresiones booleanas. Para ser exactos, consiste en una disyunción de conjunciones o simplemente OR booleano de AND.

Un ejemplo de propuesta de RFC se puede encontrar a continuación:


// Accepts an object that implements both A and B,
// OR an object that implements D.
(A&B)|D
// Accepts an object that implements C,
// OR a child of X that also implements D,
// OR null.
C|(X&D)|null
// Accepts an object that implements all three of A, B, and D,
// OR an int,
// OR null.
(A&B&D)|int|null

Atributo AllowDynamicProperties

PHP 8.2 desaprobará las variables dinámicas en las clases. Esto resultará en un mensaje de obsolescencia en PHP 8.2 y ErrorException en futuras versiones de PHP.

Por esta razón, se añadirá un nuevo atributo #[AllowDynamicProperties] a PHP 8.2 para permitir propiedades dinámicas para las clases. Un ejemplo de RFC se ve así:


class Foo {}
$foo = new Foo;
// Deprecated: Creation of dynamic property Foo::$bar is deprecated
$foo->bar = 1;
// No deprecation warning: Dynamic property already exists.
$foo->bar = 2;

Funciones obsoletas en PHP 8.2

En esta sección, veremos todas las funciones que quedarán obsoletas en PHP 8.2.

Funciones #utf8_encode() y utf8_decode()

Las funciones utf8_encode() y utf8_decode() se utilizan para convertir entre los estándares de codificación ISO-8859-1 y UTF-8. Debido a la falta de mensajes de error, advertencias y soporte de codificación limitado, PHP 8.2 dejará de usar estas funciones mientras que PHP 9.0 las excluirá por completo. Alternativamente, los usuarios podrán usar las extensiones iconv o intl para convertir el estándar de codificación.

Mbstring: codificaciones de entidad Base64, Uuencode, QPrint y HTML

Mbstring se usa para convertir hacia y desde varios estándares de codificación de caracteres, como UTF-8/16/32 e ISO-8859-1. También incluye soporte para entidades Base64, Quoted-Printable, Uuencode y HTML.

Sin embargo, estos formatos procesan la información en bytes sin procesar en lugar de secuencias de bytes. También vale la pena señalar que PHP ya tiene funciones separadas para codificar/decodificar estos formatos. Por lo tanto, PHP 8.2 desaprobará la extensión mbstring con las siguientes codificaciones etiquetadas:

  • BASE64.
  • UUENCODE.
  • HTML-ENTITIES.
  • html (alias de HTML-ENTITIES).
  • Quoted-Printable.
  • qprint (alias de Quoted-Printable).

Callables con soporte parcial

PHP 8.2 dejará de usar los callables parcialmente compatibles que no funcionan con el patrón $callable(). La lista de invocables en desuso se puede encontrar a continuación:

$callable = "self::method";
$callable = "parent::method";
$callable = "static::method";
$callable = ["self", "method"];
$callable = ["parent", "method"];
$callable = ["static", "method"];
$callable = ["MyClass", "MyParentClass::myMethod"];
$callable = [new MyClass(), "MyOtherClass::myMethod"];

Para evitar el mensaje de desaprobación, los usuarios pueden convertir todas las palabras clave propias, primarias y estáticas a sus nombres de clase correspondientes.

Interpolación de cadenas ${var}

PHP permite a los usuarios reemplazar valores de variables dentro de una cadena literal con comillas dobles, como en los siguientes ejemplos:

  • “$minombre” : incrustación directa de variables.
  • “{$minombre}” : llaves fuera de la variable.
  • “${myname}” : llaves después del signo de dólar.
  • ” ${expr}” – variables variables equivalentes a usar (cadena) ${expr}

Si bien ofrece la misma funcionalidad, la sintaxis de las dos últimas opciones es bastante compleja. Es por eso que quedarán obsoletos en PHP 8.2. Aún podrá usar las dos primeras opciones sin ningún problema.

Otros cambios de PHP 8.2

Mejora de extensión aleatoria

PHP ofrece una serie de funciones para la generación de números aleatorios. Con PHP 8.2, algunos de ellos se moverán a una nueva extensión aleatoria. Esta extensión se incluirá en PHP de forma predeterminada y no habrá una opción para desactivarla.

Aquí hay una lista de todas las funciones y constantes que se moverán a la extensión aleatoria. Ten en cuenta que permanecerán en el espacio de nombres global.

MySQLi ya no es compatible con libmysql

Históricamente, PHP admitía dos bibliotecas para conectar bases de datos MySQL: mysqlnd y libmysql. Desde PHP 5.4, la biblioteca recomendada por defecto ha sido mysqlnd. Para simplificar las pruebas de código PHP, se decidió eliminar libmysql con PHP 8.2.

De ahora en adelante, deberás usar la biblioteca mysqlnd para conectar bases de datos MySQL.

Cambios en el orden de clasificación para la función ksort

La función ksort ordena una matriz por clave en orden ascendente. PHP 8.2 introducirá una corrección de errores para que la salida del parámetro SORT_REGULAR sea consistente con los otros parámetros. Hasta PHP 8.2, priorizaba las teclas alfabéticas antes que las numéricas.

Ahora, ksort colocará las teclas numéricas antes de las alfabéticas al ordenar. En la práctica, las claves ordenadas se verán así:

["1" => '', "2" => '', "a" => '', , "b" => ''];

En vez de:

["a" => '', "b" => '', "1" => '', , "2" => ''];

La función str_split devuelve matrices vacías para cadenas vacías

Otra corrección de errores está destinada a la función str_split. Se utiliza para dividir una cadena en una matriz.

Hasta PHP 8.2, si a esta función se le asignaba una cadena vacía, también devolvía una cadena vacía. PHP 8.2 introduce una solución a este error y str_split devolverá una matriz vacía si se le da una cadena vacía.

Cómo cambiar la versión de PHP

Por lo general, los proveedores de hosting te ofrecen una manera fácil de cambiar entre versiones de PHP. Si estás utilizando hPanel de Hostinger, todo lo que necesitas hacer es seleccionar tu plan de hosting y buscar Configuración de PHP:

Aquí encontrarás todas las últimas versiones estables de PHP. Selecciona la versión preferida y presiona Actualizar para guardar los cambios.

Dentro de esta utilidad, también es posible administrar las extensiones de PHP y las opciones de PHP para todas las versiones individualmente.

Conclusión

PHP 8.2 ofrece muchas mejoras sobre las versiones anteriores. Introduce una serie de características nuevas, como nuevas clases de readonly, desaprueba varias implementaciones obsoletas con sintaxis compleja y corrige errores importantes para agilizar el flujo de trabajo de desarrollo y facilitar el uso de PHP.

Esperamos que esta publicación te haya ayudado a prepararte para el próximo lanzamiento de PHP 8.2. ¡Esperamos ansiosamente el lanzamiento completo de la nueva versión el 24 de noviembre!

Author
El autor

Stefany Franco

Stefany es una profesional de marketing, amante de la buena gramática. Disfruta escribir sobre tecnologías y SEO. En su tiempo libre, le gusta ver películas y hacer galletas.