Nuevo PHP 8.4

Disfruta del nuevo PHP 8.4 ya en dinahosting

|

Tiempo de lectura: 4 minutos

La nueva versión de PHP 8.4 acaba de lanzarse este 21 de noviembre y ya ha llegado a todos nuestros hostings. Te contamos las principales novedades que incluye para que seas el primero en aprovecharlas.

Antes de ponernos con las novedades, échale un ojo a las razones de por qué debes actualizar a la última versión tu PHP.

¿Por qué es importante actualizar la versión de PHP en tu hosting?

Instalar la nueva versión te permitirá beneficiarte en tu hosting de todas las mejoras de rendimiento y seguridad.

La última versión de PHP, o de cualquier lenguaje, suele corregir errores y solucionar posibles brechas de seguridad que pueden aprovechar los hackers. También se incluyen nuevas funcionalidades que te permitirán ser más ágil a la hora de trabajar con PHP, o que permiten una mayor velocidad en los tiempos de ejecución.

Además, como ya te contamos en varias ocasiones, PHP es uno de los lenguajes de programación más utilizados, y parece que seguirá siendo durante muchos años, pero también es la base del principal gestor de contenidos para web: WordPress.

Si usas este CMS en tus webs, es vital que cuentes una versión de PHP compatible y actualizada en tu servidor para evitar posibles errores.

¿Cómo actualizo la versión de PHP en dinahosting?

Simplemente, accede en tu Panel de Control al apartado Hosting > Servidor > PHP > Versión PHP y elige el nuevo PHP 8.4 o cualquier otra opción de las disponibles, si lo prefieres.

Y ahora sí, vamos con las principales novedades que trae la nueva versión de PHP:

Novedades PHP 8.4

Property Hooks (hooks de propiedad)

Los Property Hooks son la principal innovación del nuevo PHP 8.4. Permiten obtener un mayor control sobre las propiedades de clases y simplificarlas, evitando métodos repetitivos. A continuación, te ponemos un ejemplo básico de uso.

Supongamos que tenemos una clase Usuario que combina el nombre y apellido en una propiedad virtual nombreCompleto:

phpCopiar códigoclass Usuario {
    private bool $modificado = false;

    public function __construct(private string $nombre, private string $apellido) {}

    public string $nombreCompleto {
        // Lógica personalizada para leer el valor
        get => $this->nombre . ' ' . $this->apellido;

        // Lógica personalizada para escribir el valor
        set {
            [$this->nombre, $this->apellido] = explode(' ', $value, 2);
            $this->modificado = true;
        }
    }
}

$usuario = new Usuario('Juan', 'Pérez');

// Leer propiedad virtual
echo $usuario->nombreCompleto; // Output: Juan Pérez

// Escribir propiedad virtual
$usuario->nombreCompleto = 'Carlos García';
echo $usuario->nombreCompleto; // Output: Carlos García

Ten en cuenta que:

  • get: define la lógica de lectura de la propiedad.
  • set: define la lógica de escritura de la propiedad.

En este ejemplo, la propiedad nombreCompleto no almacena un valor directamente. En cambio, calcula el valor al leer (get) y descompone el valor al escribir (set).

Ejemplo de uso en interfaces:

Puedes definir property hooks en interfaces para estandarizar la lógica en todas las implementaciones:

phpCopiar códigointerface ConNombre {
    public string $nombreCompleto { get; }
}

class Persona implements ConNombre {
    private string $nombre = 'Jane';
    private string $apellido = 'Doe';

    public string $nombreCompleto {
        get => $this->nombre . ' ' . $this->apellido;
    }
}

En este caso, cualquier clase que implemente ConNombre debe proporcionar un método get para la propiedad nombreCompleto.

Visibilidad asimétrica

Ahora también podemos establecer el nivel de visibilidad que queramos para las propiedades de nuestros objetos, pudiendo dejarlas públicas o cambiarlas a privadas, e incluso variar esta opción en función de cómo se acceda a la propiedad.

Ejemplo:

En este ejemplo mostramos como una propiedad puede ser pública para lectura, pero privada para escritura:

phpCopiar códigoclass Usuario {
    public function __construct(private string $nombre, private string $apellido) {}

    public string $nombreCompleto {
        public get => $this->nombre . ' ' . $this->apellido; // Lectura pública
        private set { // Escritura privada
            [$this->nombre, $this->apellido] = explode(' ', $value, 2);
        }
    }
}

$usuario = new Usuario('Juan', 'Pérez');

// Acceso público a la lectura
echo $usuario->nombreCompleto; // Output: Juan Pérez

// Intento de modificar (fallará porque es privado)
// $usuario->nombreCompleto = 'Carlos García'; // Error: Cannot access private property

Aplicamos get y set con visibilidad diferente.

  • public get permite que cualquiera lea el valor
  • private set restringe la escritura solo dentro de la clase

Si no especificamos la visibilidad, se aplica la predeterminada de la propiedad.

Lazy Objects

En PHP 8.4 también se incluyen Lazy Objects (objetos perezosos), que se ejecutan de forma diferida solo cuando se accede a ellos.

Se pueden usar para posponer la obtención de datos y hacer un uso de la memoria más eficiente.

Ejemplo donde hacemos una conexión a la base de datos:

use \LazyObject\LazyObject;

class Usuario {
    public function __construct(private string $id) {}

    public function cargarDatos(): string {
        // Simula una carga costosa de datos
        sleep(2); // Simula un retraso
        return "Datos del usuario con ID: {$this->id}";
    }
}

// Crear un LazyObject
$usuario = LazyObject::create(fn() => new Usuario('12345'));

// El objeto no se inicializa aún
echo "Objeto creado, pero no inicializado.\n";

// Acceso al método inicializa el objeto
echo $usuario->cargarDatos(); // Aquí el objeto se inicializa y se ejecuta el método

Nuevo atributo [\Deprecated]

Con este atributo puedes marcar como deprecadas u obsoletas funciones, métodos o contantes de clase.

Su comportamiento es el mismo que el que aplica el mecanismo de deprecación ya incluido en PHP.

Solicitudes de parsing en HTTP no-POST

Se añade la función request_parse_body() que permite el parsing en RFC1867 (multiparte) en solicitudes HTTP non-POST.

Encadenado de expresiones new sin paréntesis

Cuando se encadenan diferentes métodos, ya no es necesario poner la llamada entre paréntesis.

Ejemplo:

Lo que antes escribiríamos así:

$usuario = (new Usuario('Juan', 'Pérez'));

Ahora puede escribirse omitiendo los primeros paréntesis:

$usuario = new Usuario('Juan', 'Pérez');

Nuevas opciones para cURL

Ahora la curl_version() devuelve el valor inicial feature_list, que lista todas las funciones cURL, tanto sean compatibles como no.

Además, se suman otras opciones como:

  • CURL_HTTP_VERSION_3 y CURL_HTTP_VERSION_3ONLY para CURLOPT_HTTP_VERSION.
  • CURLOPT_PREREQFUNCTION
  • CURLOPT_SERVER_RESPONSE_TIMEOUT
  • CURLOPT_DEBUGFUNCTION

Nuevo espacio de nombres DOM

Se añaden nuevas clases de espacios de nombres DOM compatibles con HTML5, comopor ejemplo Dom\Node, que es la nueva DOMNode.

Por otro lado, la nueva clase \Dom\HTMLDocument permite analizar documentos HTML5 de manera nativa, mejorando las limitaciones del antiguo \DOMDocument.

Subclases específicas para el controlador PDO

Para facilitar un mejor soporte a las funcionalidades específicas de bases de datos se han añadido sublacases para PDO que se pueden llamar utilizando PDO::connect ().

También se agregó nueva compatibilidad con analizadores SQL: PDO_MYSQL, PDO_PSGSQL y PDO_SQLITE.

Mejoras de seguridad en OpenSSL

  • Añadida compatibilidad con claves basadas en Curve25519 y Curve448.
  • Para OpenSSL 3.2 y compilación NTS, se implementa el algoritmo hash de contraseña PASSWORD_ARGON2.

Estas son las principales novedades, pásate por la nota de la actualización para ver el listado completo con todas las características añadidas en PHP 8.4.

Hasta aquí nuestro repaso, ¿a qué esperas para probar el nuevo PHP 8.4? ¡Pásate a esta versión y conoce de primera mano todas estas actualizaciones!

Y si ya lo has puesto a prueba, no te olvides de contarnos tus impresiones en los comentarios 😉


Avatar de Marta Mariño

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Newsletter

Suscríbete y recibe periódicamente consejos muy útiles para tu web y ecommerce 🙂 Además, te regalamos
3 guías
: Digitalización, WordPress y Ciberseguridad.

Conviértete en afiliado

Gana dinero recomendando dinahosting a todo el mundo.