Novedades de PHP 8.2: una descripción general completa

Publicado: 2023-10-17
Compartir en perfiles sociales.

PHP, el lenguaje de secuencias de comandos del lado del servidor ampliamente utilizado, evoluciona constantemente para satisfacer las demandas siempre cambiantes del desarrollo web. El lanzamiento de PHP 8.2 en noviembre de 2022 trae consigo una serie de características interesantes, importantes desaprobaciones y correcciones de errores cruciales. En este artículo, profundizaremos en los aspectos notables de las novedades de PHP 8.2, arrojando luz sobre lo que los desarrolladores pueden esperar de esta última versión.

Tabla de contenido

Nuevas características

1. Enums: Introducción a la seguridad de tipos

Quizás una de las adiciones más esperadas a PHP, la versión 8.2 finalmente introduce soporte nativo para enumeraciones (enums). Las enumeraciones permiten a los desarrolladores definir un conjunto de valores con nombre con tipos explícitos, agregando una capa significativa de seguridad de tipos a PHP.

Aquí hay un ejemplo simple de cómo funcionan las enumeraciones:

 enum Color { case RED; case GREEN; case BLUE; }

Las enumeraciones también pueden tener valores asociados, lo que las hace versátiles para diversos casos de uso. Esta característica es particularmente beneficiosa para garantizar que su código siga siendo legible, mantenible y menos propenso a errores derivados del mal uso de constantes o números mágicos.

2. Promoción de constructores: reducción del código repetitivo

PHP 8.2 introduce la promoción del constructor, una característica destinada a simplificar las definiciones de clases y reducir el código repetitivo. Con la promoción del constructor, puede declarar e inicializar propiedades de clase directamente en la lista de parámetros del constructor. Esto elimina la necesidad de declaraciones de propiedades separadas, lo que hace que su código sea más conciso y más fácil de mantener.

 class User { public function __construct( public string $name, public string $email, public ?string $bio = null ) {} }

La promoción de constructores es especialmente valiosa cuando se trata de clases que tienen muchas propiedades, ya que reduce el desorden en su código base.

3. Clases de solo lectura

En PHP 8.2, las clases de solo lectura permiten a los desarrolladores definir clases con propiedades que solo se pueden configurar una vez, generalmente durante la creación de objetos. Esto asegura que las propiedades permanezcan constantes durante toda la vida del objeto. Las propiedades de solo lectura se declaran utilizando el modificador de solo lectura y deben inicializarse en el constructor de la clase.

Con PHP 8.2, el proceso se simplifica completamente:

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

4. Argumentos nombrados en declaraciones "incluir" y "requerir"

En PHP 8.2, ahora se pueden usar argumentos con nombre al incluir o solicitar archivos. Esta característica mejora la legibilidad del código, especialmente cuando se trata de funciones que aceptan múltiples argumentos.

 include filename: 'my_file.php', once: true;

Al proporcionar nombres para estos argumentos, hace que su código se explique por sí mismo y reduce la probabilidad de introducir errores debido a un orden incorrecto de los argumentos.

5. Avisos de desuso para paréntesis implícitos

Para promover la coherencia y legibilidad del código, PHP 8.2 introduce avisos de obsolescencia para funciones y métodos que se llaman sin paréntesis. Si bien todavía no es un error, esto sirve como una advertencia para que los desarrolladores adopten la práctica recomendada de usar paréntesis constantemente al llamar a funciones.

 // Deprecated usage myFunction; // Recommended usage myFunction();

Al desalentar los paréntesis implícitos, PHP tiene como objetivo mejorar la claridad y la facilidad de mantenimiento del código.

6. Soporte para ocultar valores de parámetros sensibles

PHP proporciona la capacidad de monitorear la pila de llamadas en cualquier estado dado del programa, lo que resulta especialmente valioso a la hora de solucionar problemas de aplicaciones. Sin embargo, en ciertos casos, los seguimientos de la pila pueden contener detalles confidenciales que justifican su ocultación.

En PHP 8.2, se introducirá un nuevo atributo llamado "SensitiveParameter". Este atributo sirve para impedir que se muestren o registren datos confidenciales cuando una aplicación encuentra errores. En términos prácticos, su uso será el siguiente:

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

7. Introducción de la función mysqli_execute_query y el método mysqli::execute_query

PHP, el lenguaje de programación versátil para el desarrollo web, evoluciona continuamente para mejorar sus capacidades y facilidad de uso. En PHP 8.2, los desarrolladores pueden anticipar la introducción de dos nuevas características: la función mysqli_execute_query y el método mysqli::execute_query. Estas adiciones están diseñadas para agilizar y simplificar las interacciones con las bases de datos, lo que hace que sea aún más conveniente trabajar con bases de datos MySQL.

Función mysqli_execute_query

La función mysqli_execute_query es una poderosa adición a la extensión MySQLi de PHP. Está diseñado específicamente para ejecutar consultas SQL en una base de datos MySQL. Esta función ofrece una forma sencilla y eficiente de enviar consultas SQL y recuperar resultados. A continuación se muestra un breve ejemplo de su uso:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM users WHERE status = ?"; $stmt = $mysqli->prepare($sql); $status = "active"; $stmt->bind_param("s", $status); $result = mysqli_execute_query($stmt); while ($row = $result->fetch_assoc()) { } $stmt->close(); $mysqli->close();

La función mysqli_execute_query agiliza el proceso de preparación y ejecución de consultas mientras mantiene la seguridad mediante la vinculación de parámetros.

mysqli::execute_query Método

Además de la nueva función, PHP 8.2 introduce el método mysqli::execute_query como parte de la clase MySQLi. Este método simplifica la ejecución de consultas para los desarrolladores que prefieren la programación orientada a objetos. A continuación se muestra un ejemplo de su uso:

 $mysqli = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM products WHERE category = ?"; $stmt = $mysqli->prepare($sql); $category = "electronics"; $stmt->bind_param("s", $category); $result = $stmt->execute_query(); while ($row = $result->fetch_assoc()) {} $stmt->close(); $mysqli->close();

El método mysqli::execute_query ofrece un enfoque orientado a objetos para ejecutar consultas de bases de datos, proporcionando una experiencia más intuitiva para los desarrolladores que prefieren este estilo de codificación.

8. Permitir constantes en los rasgos: mejorar la reutilización y el mantenimiento del código

Los rasgos son una característica valiosa en los lenguajes de programación modernos, incluido PHP, que permiten a los desarrolladores reutilizar código en diferentes clases sin necesidad de herencia. Los rasgos de PHP proporcionan principalmente métodos, pero en PHP 8.2 se introduce una mejora notable: la capacidad de definir constantes dentro de los rasgos. Esta característica tiene como objetivo mejorar la organización, reutilización y mantenibilidad del código, ofreciendo a los desarrolladores más flexibilidad en el diseño de su código.

El papel de los rasgos en PHP

Antes de profundizar en la adición de constantes en los rasgos, revisemos brevemente el papel de los rasgos en PHP. Los rasgos son un mecanismo para la reutilización de código en lenguajes de herencia única como PHP. Le permiten definir un conjunto de métodos que se pueden reutilizar en varias clases. Cuando una clase usa un rasgo, hereda los métodos definidos en ese rasgo, mejorando la modularidad del código y reduciendo la redundancia.

 trait Loggable { public function log($message) { }} class User { use Loggable; public function register() { $this->log('User registered.'); }}

En este ejemplo, el rasgo Loggable proporciona un método de registro que puede ser utilizado por cualquier clase que incorpore el rasgo, mejorando la capacidad de mantenimiento y la organización del código.

Constantes en los rasgos: una nueva característica

Con PHP 8.2, los desarrolladores ahora pueden definir constantes dentro de los rasgos, lo que no era posible en versiones anteriores de PHP. Las constantes en los rasgos funcionan de manera similar a las constantes en las clases, pero son accesibles en las clases que usan el rasgo.

 trait Configuration {
const MAX_CONNECTIONS = 10;
}class Database {
use Configuration;
public function connect() { $maxConnections = self::MAX_CONNECTIONS; } }

En este ejemplo, el rasgo de Configuración define una constante MAX_CONNECTIONS, a la que se puede acceder dentro de la clase de Base de datos que usa el rasgo. Esto permite la centralización de las constantes de configuración y promueve una estructura de código más organizada y mantenible.

9. Introducción de nuevos tipos de forma normal disyuntiva (DNF) en PHP 8.2

PHP, un lenguaje de programación dinámico y versátil, continúa evolucionando para satisfacer las demandas cada vez mayores del desarrollo web. Con el lanzamiento de PHP 8.2, los desarrolladores están de enhorabuena con la introducción de nuevos tipos de forma normal disyuntiva (DNF). Esta adición al lenguaje mejora la expresividad y flexibilidad de PHP, permitiendo a los desarrolladores trabajar con expresiones lógicas complejas de manera más efectiva.

Comprensión de la forma normal disyuntiva (DNF)

Antes de profundizar en los nuevos tipos de DNF en PHP 8.2, es esencial comprender qué representa la forma normal disyuntiva (DNF) en lógica. DNF es una forma canónica de representar expresiones lógicas donde cada expresión es una disyunción (O) de conjunciones (Y). En términos más simples, es una forma de dividir declaraciones lógicas complejas en una serie de condiciones simples unidas por operadores OR.

Por ejemplo, la expresión lógica (A Y B) O (C Y D) está en DNF porque es una disyunción de dos conjunciones.

Nuevos tipos de DNF en PHP 8.2

PHP 8.2 introduce nuevos tipos DNF como una forma de trabajar y manipular expresiones lógicas de forma más intuitiva. Estos tipos de DNF proporcionan una abstracción de nivel superior para manejar lógica compleja, lo que facilita a los desarrolladores la gestión de condiciones complejas en su código.

A continuación se ofrece una descripción general de los nuevos tipos de DNF y cómo se pueden utilizar:

1. FormaNormalDisyuntiva

El tipo DisjunctiveNormalForm representa expresiones lógicas en DNF. Puede crear instancias DisjunctiveNormalForm para encapsular condiciones complejas:

 $dnfExpression = new DisjunctiveNormalForm(
new Conjunction('A', 'B'),
new Conjunction('C', 'D')
);

En este ejemplo, $dnfExpression representa la expresión DNF (A Y B) O (C Y D).

2. Conjunción

El tipo Conjunción representa la conjunción (Y) de una o más condiciones. Puedes crear instancias de Conjunction para construir conjunciones complejas:

 $conjunction = new Conjunction('A', 'B', 'C');

Aquí, $conjunction representa la conjunción (A AND B AND C).

3. Valor lógico

El tipo LogicalValue representa valores lógicos simples, que pueden ser verdaderos, falsos o una variable. Se puede utilizar junto con otros tipos de DNF para crear expresiones más complejas:

 $value = new LogicalValue('A');

Aquí, $value representa la variable lógica A.

10. Presentamos el atributo AllowDynamicProperties: ampliando la flexibilidad en PHP

El atributo "AllowDynamicProperties" es una adición notable a PHP, especialmente para los desarrolladores que valoran la naturaleza dinámica del lenguaje. Con este atributo, puede permitir que un objeto acepte y manipule propiedades que no se han definido explícitamente dentro de su clase.

A continuación se muestra un ejemplo sencillo de cómo se puede aplicar el atributo "AllowDynamicProperties":

 class DynamicObject {
}
$dynamicObj = new DynamicObject();
$dynamicObj->newProperty = "This is a dynamic property.";
echo $dynamicObj->newProperty;

En este ejemplo, la clase "DynamicObject" está marcada con el atributo "AllowDynamicProperties", que permite agregar y acceder a propiedades dinámicamente. Este comportamiento dinámico puede resultar particularmente útil cuando se trata de objetos que necesitan adaptarse a diversas estructuras de datos o cuando se trabaja con datos de fuentes externas, como API.

Depreciaciones y eliminaciones en PHP 8.2

  • Extensiones: PHP 8.2 se ha despedido de varias extensiones obsoletas y sin mantenimiento, incluidas "oci8", "mysql", "mcrypt" e "interbase". Se recomienda encarecidamente a los desarrolladores que dependen de estas extensiones que migren a alternativas modernas para garantizar la seguridad y estabilidad de sus aplicaciones.
  • Función each() : La función each() ahora está oficialmente obsoleta en PHP 8.2. Esta función se usó para iterar sobre matrices avanzando el puntero interno y devolviendo el par clave-valor actual. Sin embargo, tuvo varios problemas y fue reemplazado en gran medida por bucles foreach, que ofrecen mejor legibilidad y facilidad de mantenimiento.
  • Función create_function() : La función create_function() está marcada como obsoleta. Esta función se utilizó para crear dinámicamente funciones anónimas, pero no se recomendó debido a problemas de seguridad y mejores alternativas como cierres.
  • Indicador de filtro FILTER_SANITIZE_MAGIC_QUOTES : el indicador de filtro FILTER_SANITIZE_MAGIC_QUOTES está en desuso. Esta bandera se usó con filter_var() para desinfectar la entrada agregando barras antes de caracteres como comillas simples y dobles. Las mejores prácticas modernas sugieren el uso de declaraciones preparadas y consultas parametrizadas para manejar la entrada de la base de datos, lo que hace que esta bandera quede obsoleta.
  • Función stristr() : La función stristr(), que realiza una búsqueda que no distingue entre mayúsculas y minúsculas de una subcadena en una cadena, está en desuso. Si bien sigue siendo funcional, se recomienda a los desarrolladores que utilicen la versión que no distingue entre mayúsculas y minúsculas, stripos(), o las alternativas str_contains() para mayor claridad.
  • define() con argumentos de matriz : el uso de define() para definir constantes con matrices como valores ahora está obsoleto. Aunque era posible definir constantes con matrices como valores, esta práctica se considera poco convencional y las constantes normalmente deberían tener valores escalares.
  • Indicadores SORT_NUMERIC y SORT_REGULAR : los indicadores SORT_NUMERIC y SORT_REGULAR para funciones de clasificación como sort() y usort() están en desuso. Estas banderas ya no son necesarias, ya que PHP detecta automáticamente el tipo de datos de los elementos y los clasifica en consecuencia.

Mejoras de rendimiento

PHP 8.2 trae varias mejoras y optimizaciones de rendimiento bajo el capó. Si bien el alcance de estas mejoras puede variar según su caso de uso específico, es probable que la actualización a PHP 8.2 brinde algunos beneficios de rendimiento notables. Estas mejoras pueden tener un impacto significativo en las aplicaciones con mucho tráfico o en aquellas que realizan tareas que consumen muchos recursos, haciéndolas más receptivas y eficientes.

Corrección de errores y estabilidad

Como ocurre con cualquier versión nueva de PHP, PHP 8.2 soluciona numerosos errores y problemas de estabilidad. Estas correcciones son cruciales para mantener la confiabilidad general del lenguaje y garantizar que PHP siga siendo una opción sólida para el desarrollo web.

Preguntas frecuentes: nuevo en PHP 8.2

¿Por qué se introducen avisos de desuso para paréntesis implícitos en PHP 8.2?

Los avisos de obsolescencia de los paréntesis implícitos fomentan un estilo de código coherente al advertir a los desarrolladores que utilicen paréntesis al llamar a funciones. Esto mejora la claridad y el mantenimiento del código.

¿Qué son las clases de solo lectura y cómo funcionan en PHP 8.2?

Las clases de solo lectura en PHP 8.2 permiten que las propiedades se establezcan solo una vez, generalmente durante la creación del objeto, lo que garantiza que permanezcan constantes durante toda la vida útil del objeto. Las propiedades de solo lectura se declaran utilizando el modificador de solo lectura.

¿Cómo simplifican la función mysqli_execute_query y el método mysqli::execute_query las interacciones de la base de datos en PHP 8.2?

Estas características agilizan el proceso de ejecución de consultas SQL en una base de datos MySQL, proporcionando formas eficientes y seguras de enviar consultas y recuperar resultados, ya sea de forma procesal o orientada a objetos.

¿Cómo el atributo "AllowDynamicProperties" amplía la flexibilidad en PHP 8.2?

El atributo "AllowDynamicProperties" permite que los objetos acepten y manipulen propiedades que no han sido definidas explícitamente dentro de su clase, mejorando la naturaleza dinámica de PHP.

¿Por qué es importante la corrección de errores y la estabilidad en PHP 8.2?

Las correcciones de errores y las mejoras de estabilidad en PHP 8.2 son cruciales para mantener la confiabilidad general del lenguaje, asegurando que PHP siga siendo una opción sólida para el desarrollo web al abordar problemas y mejorar su estabilidad.

Conclusión

En conclusión, PHP 8.2 emerge como un hito fundamental en el panorama en constante evolución del desarrollo web. Con una amplia gama de funciones innovadoras, flexibilidad mejorada y optimizaciones de rendimiento, satisface las demandas cambiantes de los desarrolladores de todo el mundo.

La introducción de enumeraciones, promoción de constructores, clases de solo lectura, argumentos con nombre y el atributo AllowDynamicProperties permite a los desarrolladores escribir código más limpio y fácil de mantener. Además, los nuevos tipos de forma normal disyuntiva (DNF) aportan capacidades avanzadas de manipulación lógica a PHP, ampliando aún más su versatilidad. Sin embargo, a medida que PHP avanza, también se despide de las extensiones y funciones obsoletas y, al mismo tiempo, soluciona los errores con diligencia, lo que garantiza que siga siendo una opción confiable y segura para el desarrollo web.

Contenido relacionado:

Cómo solucionar el error "WordPress deshabilita la actualización de PHP requerida" (2 métodos)

Registros de consultas lentas de MySQL