PHP 8.2: ¿Qué Esperar? (Una Guía Para Desarrolladores)

PHP 8.2: ¿Qué Esperar? (Una Guía Para Desarrolladores) thumbnail

Se espera que la versión PHP 8.2 sea lanzada en noviembre de este año, con la versión estable más reciente siendo 8.1.5. Aunque aún es muy temprano, ha habido algo de recepción mixta sobre la actualización. 

Sin embargo, saber qué esperar puede ayudarte a prepararte mejor para la más reciente versión de PHP. Al aprender sobre las nuevas funciones y aquellas que serán eliminadas, puedes entender cómo puede afectar el desarrollo esta actualización. Este conocimiento también puede ayudarte a prepararte para un lanzamiento eventual. 

En esta publicación, recapitulamos las versiones más recientes de PHP. Luego cubriremos todo lo nuevo de PHP 8.2 y hablaremos sobre la agenda de lanzamiento. ¡Comencemos!

Una Vista General de Las Versiones PHP

El PHP es el lenguaje principal de programación de WordPress. Juega un papel vital al convertir la información de tu base de datos en páginas web HTML que tus visitantes pueden acceder.

Como dueño de un sitio web o desarrollador, es probable que estés familiarizado con la importancia de mantener actualizados tus temas, plugins y versión core de WordPress. Sin embargo, también es crítico mantener tu PHP actualizado. 

Actualmente, WordPress recomienda usar como mínimo PHP 7.4. Las versiones más antiguas ya no reciben soporte activo de actualizaciones de seguridad y soluciones de bugs. Por lo tanto, actualizar tu PHP a la versión más estable, puede resultar en una mejor seguridad de sitio, rendimiento mejorado y niveles más altos de soporte (hacemos énfasis en la palabra estable, ya que WordPress no es completamente compatible con PHP 8.0 aún, entonces recomendamos realizar tus actualizaciones con precaución).

PHP 7.4 introdujo propiedades escritas, un separador numérico de guión bajo y varias mejoras. Desde entonces, han sido lanzadas un par más de versiones de PHP

PHP 8.0, lanzado en noviembre del 2020, trajo consigo un puñado de funciones esenciales. En adición a la sintaxis y las mejoras de rendimiento, el lanzamiento incluyó:

  • Parámetros nombrados
  • Coincidencia de sintaxis
  • Tipos de unión
  • Promoción Inmobiliaria Constructora
  • JIT (el cual afecta cómo ejecuta el PHP las fuentes de código)

Un año después vino PHP 8.1, la última versión principal de PHP. Esta actualización incluye funciones significativas, tales como:

  • Tipos de intersección
  • Propiedades Readonly
  • Enums
  • Fibras
  • Tipos Never return

Mantenerte al tanto de las últimas versiones de PHP puede ayudarte a impulsar el rendimiento y la seguridad de tu sitio web. Sin embargo, es importante saber qué cambios esperar antes de que hagas tu actualización. Si estás interesado en probar el estado actual de PHP 8.2, puedes hacerlo a través de GitHub.

Qué Hay de Nuevo en PHP 8.2

Se espera que PHP 8.2 sea lanzado a finales de 2022. Aquí está la agenda actual de lanzamiento, con Disponibilidad General (GA) programada para el 24 de noviembre, 2022:

  • Junio 9: Alpha 1
  • Junio 23: Alpha 2
  • Julio 7: Alpha 3
  • Julio 19: Congelamiento de Funciones
  • Julio 21: Beta 1
  • Agosto 4: Beta 2
  • Agosto 18: Beta 3
  • Septiembre 1: Candidato de lanzamiento 1
  • Septiembre 15: Candidato de lanzamiento 2
  • Septiembre 29: Candidato de lanzamiento 3
  • Octubre 13: Candidato de lanzamiento 4
  • Octubre 27: Candidato de lanzamiento 5
  • Noviembre 10: Candidato de lanzamiento 6
  • Noviembre 24: GA (Disponibilidad General)

De acuerdo con la documentación oficial del sitio de PHP, debería haber algunas nuevas funciones y aquellas que serán eliminadas. ¡Veamos algunas de ellas!

Tipos de Forma Normal Disyuntiva(DNF)

PHP 8.2 introducirá una nueva función de tipos de Forma Normal Disyuntiva (DNF). El DNF es una manera estandarizada de organizar expresiones booleanas — específicamente, en una serie ORed de ANDs. Cuando un DNF es aplicado a declaraciones de tipo o ‘Type’, habilita una manera estandarizada de escribir tipos combinados de ‘Union’ e ‘Intersection’ que el analizador puede manejar. 

Nueva Función mysqli_execute_query y Método mysqli::execute_query

Ejecutar consultas MySQLi parametrizadas será más fácil en PHP 8.2, gracias a la nueva función mysqli_execute_query($sql, $params)y el método mysqli::execute_query.Esto reducirá aún más la complejidad de emplear solicitudes parametrizadas, lo cual entonces facilitará que los desarrolladores alejarse de  mysqli_query() así como el escape peligroso/arriesgado de los valores de usuario.

Propiedades ‘Fetch enum’ en Expresiones Constantes

Según el RFC, “Este RFC propone permitir el uso de->/?-> para obtener propiedades de enumeraciones en expresiones constantes. La motivación principal de este cambio es permitir obtener las propiedades de nombre y valor en lugares donde no se permiten objetos de enumeración, como llaves de array”.

Nueva Extensión Random

PHP 8.2 introduce una nueva extensión PHP llamada random. Organiza y consolida la función existente PHP relacionada con generación aleatoria de números. También presenta una serie de estructuras de clases PHP y clases de excepción para proporcionar opciones granulares para generadores de números aleatorios y manejo de excepciones.

La extensión random está agrupada con PHP, y no hay una opción de configuración ‘compile-time’ o ‘run-time’ para deshabilitar la extensión random. La extensión ‘random’ siempre estará disponible en PHP 8.2 y versiones más nuevas.

Nueva Función curl_upkeep

PHP 8.2 añade una nueva función a la extensión Curl llamada curl_upkeep. La función curl_upkeep llama a curl_easy_upkeep() desde libcurl, que es la biblioteca C subyacente que utiliza la extensión PHP Curl.

La función curl_upkeep() hace el trabajo que mantiene viva una conexión Curl. Pero no todos los tipos de conexión que Curl integra admiten el mantenimiento de la conexión. Actualmente, solo las conexiones HTTP/2 lo admiten.

Nueva Función ini_parse_quantity

ini_parse_quantity es una nueva función que será añadida a PHP en su versión PHP 8.2. Analiza cualquier tamaño de datos reconocido por los valores PHP INI (como 56K, 256M, o 1G) y luego devuelve el tamaño de los datos en bytes. Puede ser útil al analizar valores INI existentes o proporcionados en una aplicación PHP. Sin embargo, no reconoce los sufijos IEC para tamaños de datos como MB, MiB o GB, y no es adecuado para convertir valores de tamaño de datos estándar en bytes.

Nueva Función memory_reset_peak_usage

PHP 8.2 incluirá una nueva función llamada memory_reset_peak_usage. Esta restablecerá el pico de uso de memoria que devuelve la función memory_get_peak_usage

Esta función será útil para aquellos casos que involucran invocar una acción muchas veces y para grabar el pico de uso de memoria en cada iteración. Los desarrolladores podrán usar esta nueva función para restablecer el pico de uso de memoria en cualquier momento durante el tiempo de vida de la solicitud. 

Recibe Contenido Directamente en Tu Bandeja de Entrada

Suscríbete a nuestro blog y recibe contenido grandioso como este directamente en tu bandeja de entrada.

Clases Readonly

Introducidas en PHP 8.1, las propiedades readonly serán expandidas en la versión PHP 8.2 para añadir azúcar sintáctico para que todas las propiedades de clases sean readonly al tiempo: 

readonly class Post
{
    public function __construct(
        public string $title, 
        public Author $author,
        public string $body,
        public DateTime $publishedAt,
    ) {}
}

Esto prevendrá que las propiedades dinámicas sean añadidas a las clases. 

Tipos ‘Null’, ‘True’ y ‘False Standalone’

En PHP 8.2, el tipo de retorno false estará disponible como un tipo standalone, en vez de ser estrictamente un tipo de Unión para cuando un error ocurra, lo cual ya es posible:

function alwaysFalse(): false

{

    return false;

}

Lo mismo es cierto para el tipo null. Por ejemplo, como tipo standalone, a diferencia de antes, NullPost::getAuthor()solo podrá regresar null. 

PHP 8.2 también permite true como tipo standalone.

Propiedades Dinámicas en Desuso

Las propiedades dinámicas serán removidas en PHP 8.2, resultando en un ErrorException una vez que PHP 9.0 esté presente. Estas propiedades son puestas en un objeto:

class Post

{

    public string $title;

}

// …

$post->name = ‘Name’;

Las propiedades dinámicas permiten flexibilidad cuando estás creando clases (ej. Objetos de valor) sin una declaración estricta de clase. Su eliminación probablemente será un problema para los desarrolladores que dependan de las propiedades dinámicas, ya que los llevará más hacia un análisis estático. Por esta razón, algunos desarrolladores están preocupados sobre estos cambios con PHP 8.2. 

Sin embargo, las clases que usen __get y __set soportarán propiedades dinámicas, así como también stdClass.

Alternativamente, los desarrolladores pueden usar el nuevo atributo #[AllowDynamicProperties], declarados en el espacio de nombre global, en las clases de esas propiedades:

#[AllowDynamicProperties]

 class User() {}

 $user = new User();

 $user->foo = ‘bar’;

Mientras que no es recomendable, otra opción es deshabilitar las advertencias de obsolescencia.

Nuevo Modificador /n

PHP 8.2 incluirá soporte para el modificador /n (no capture) de la familia de funciones  preg_*. Cuando sea utilizado, cualquier grupo con meta caracteres ( ) no se capturará aparte de los grupos capturados que se nombran. Esencialmente, el resultado es el mismo que marcar cada grupo como no capturador. 

La razón detrás de este cambio es que el modificador simplifica las expresiones regulares complejas para múltiples grupos. En lugar de comercializar cada grupo como no capturador, los desarrolladores pueden marcar todos los grupos como no capturador. Luego, pueden seleccionar y nombrar grupos específicos que necesitan capturar.

Redactar Parámetros en Back Traces

Muchos desarrolladores usan servicios que rastrean seguimientos de stack y los errores de producción provenientes de las bases de código. Estos servicios pueden notificar a los usuarios cuando y si algo sale mal. Por ejemplo, el seguimiento de las llamadas de stack es útil cuando estás depurando o haciendo debugging en una aplicación.  

Sin embargo, algunas veces los seguimientos de stack pueden contener información sensible, tales como nombres de usuario y contraseñas. PHP 8.2 incluirá un atributo #[SensitiveParameter] que prevendrá que esta información sea incluida en el seguimiento de stack cuando las cosas salgan mal:

function test(

    $foo,

    #[\SensitiveParameter] $bar,

    $baz

) {

    throw new Exception(‘Error’);

}

test(‘foo’, ‘bar’, ‘baz’);

PHP 8.2 utilizará parámetros sensibles para redactar información privada de los seguimientos de stack, haciéndolos más seguros. Estos parámetros aseguran que la información no termine en los registros de error. Ten en cuenta que este atributo solo estará disponible si empleas estos parámetros. 

Interpolación de Cadenas Obsoletas ${}

Hay varias formas de insertar variables en cadenas con PHP. Sin embargo, PHP 8.2 dejará en desuso dos métodos. El primero es el uso de ${} en las cadenas: 

“Hello ${world}”;

The second is using ${} (variable variables):

“Hello ${(world)}”;

Esto probablemente no será un problema significativo para los desarrolladores, ya que los dos métodos más populares de interpolación de cadenas aún funcionarán. 

Eliminación de Callables Parcialmente Soportados

Otro cambio será la eliminación de callables o llamadas parcialmente soportadas. Hay múltiples formas de crear una llamada en PHP. Puede ser llamado con o sin los parámetros 

$callable() syntax, el user_call_func(/a_array), o usando una función con un llamado de regreso

Los patrones de llamado eliminados incluyen los siguientes:

$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”];

Comenzando desde PHP 8.2, llamar cualquiera de los anteriores resultará en el siguiente mensaje de eliminación:

class Test {

    public static function myMethod(): void {

        echo “Called”;

    }

    public static function call(): void {

        $callable = ‘self::myMethod’;

        call_user_func($callable);

    }

}

$callable = Test::call();

// “Called”;

Sin embargo, pasar estos llamados a la función  is_callable o emplearlos con los tipos de parámetro de llamado no generará un mensaje de obsolescencia. Para prevenir el mensaje de obsolescencia, los desarrolladores, en cambio, pueden convertir palabras claves estáticas, propias o principales en un llamado de código para sus nombres respectivos de clases utilizando el método ::class magic

Parte de la razón detrás del cambio es permitir que los llamados sean utilizados para propiedades de tipos. Hace que sean menos dependientes del contexto. 

MySQLi Ya No Podrá Ser Compilado con libmysql

En el pasado, PHP ha soportado 2 bibliotecas para conectar bases de datos MySQL: mysqlnd y libmysql. Desde PHP 5.4, la primera ha sido la biblioteca predeterminada. Sin embargo, ha sido posible compilar MySQLi a través de extensiones. 

A partir de PHP 8.2, compilar con una extensión MySQLi con libmysql no será soportado. Intentar hacerlo resultará en un error de configuración:

./configure –with-mysqli=FOO

Linking mysqli against external library is no longer supported

Esto probablemente no causará ningún error significativo para los desarrolladores. Sin embargo, las dos funciones más grandes soportadas por libmysql que no están disponibles con mysqlnd son soportadas para reconexión automática y autenticación a través de LDAP y SASL. 

Mantén Actualizada la Versión PHP de Tu WordPress

Como desarrollador, es esencial probar tu código con las próximas versiones PHP. En este caso, los desarrolladores deberían comenzar a probar su código con PHP 8.2 tan pronto como sea posible para asegurar que tu código no dañe los sitios de los usuarios cuando realicen la actualización. 

El Ambiente Perfecto de Desarrollo

Ofrecemos servicios de Shared hosting amigables con todos los presupuestos, con funciones y recursos robustos para ayudarte a crear el sitio web perfecto. Encuentra los planes desde $1.99 USD/mes.

shared hosting
Photo of Luke Odom
Sobre el Autor:

Luke es el Director de Operaciones de IT. Es responsable de los equipos que mantienen las operaciones funcionando sin problemas... En su tiempo libre, disfruta leer fantasía/ciencia ficción y estar con su esposa y sus 4 hijos. Conéctate con Luke en LinkedIn: https://www.linkedin.com/in/luke-odom-039986a/