🚨 ¡Nueva review! ✨ Mi ratón favorito para programar: el Logitech MX Master 3S . ¡Échale un ojo! 👀

Novedades de PHP 8.5: Lo que necesitas saber

Un repaso rápido y sencillo a las nuevas funcionalidades que trae PHP 8.5.

Escrito por domin el 14 de diciembre de 2025

🐘 PHP 8.5: Pequeños cambios, grandes mejoras

Bueno porfin he acabado mi recopilación de algunos patrones de diseño que ya acabé un poco cansado y ahora vamos a hablar de otras cositas como que… ¡Ya está entre nosotros la versión 8.5 de PHP!. A diferencia de otras versiones que rompían todo, esta actualización se centra en hacernos la vida más agradable a los desarrolladores. Viene cargada de “Quality of Life improvements”, es decir, mejoras que hacen que escribir código sea menos tedioso y más limpio.

Aquí te resumo lo más interesante de forma muy simple.

PHP 8.5 upgrade.

🚀 El operador pipe |>

Si vienes del mundo de Linux o de lenguajes funcionales, esto te va a encantar. El operador Pipe (|>) nos permite encadenar funciones de una manera mucho más legible.

El Problema (antes)

Hasta ahora si querías aplicar varias funciones a un valor, acababas con un popurrí de paréntesis difícil de leer:

$resultado = strtolower(trim(htmlentities($input)));

Se puede apreciar un lindo follón bastante complicado de leer, y es un ejemplo bastante usual.

La solución (ahora)

Con el operador Pipe, pasamos el valor de una función a la siguiente, de izquierda a derecha (o de arriba a abajo), como si fuera una tubería:

$resultado = $input
    |> htmlentities(...)
    |> trim(...)
    |> strtolower(...);

El ícono sale representado como |> pero realmente es |>, que se convierte automáticamente y no deja ver los cáracteres reales.

Mucho más limpio, ¿verdad? El valor de la izquierda se pasa automáticamente como primer argumento a la función de la derecha.


🔍 array_first() y array_last()

¡Por fin! Después de mucho tiempo pidiéndolo, PHP incluye funciones nativas para obtener el primer y el último elemento de un array sin tener que hacer malabares con reset(), end() o array_key_first().

Antes

$frutas = ['manzana', 'pera', 'plátano'];
// Para sacar el primero...
$primera = reset($frutas); // Pero cuidado, esto mueve el puntero interno...
// O la forma segura pero fea:
$primera = $frutas[array_key_first($frutas)];

Ahora

$frutas = ['manzana', 'pera', 'plátano'];
$primera = array_first($frutas); // 'manzana'
$ultima = array_last($frutas);   // 'plátano'

Simple y directo, como debe ser.


👯 Clonar con modificaciones (clone with)

Si trabajas con objetos inmutables (que no se pueden cambiar una vez creados), sabrás que clonarlos para cambiar solo una propiedad era un poco rollo.

Antes

Tenías que clonar el objeto y luego, de alguna manera mágica (o con métodos with...), cambiar la propiedad.

$coche = new Coche('Rojo', 'V8');
$cocheAzul = clone $coche;
$cocheAzul->color = 'Azul'; // Esto fallaba si la propiedad era readonly

Ahora

PHP 8.5 introduce una sintaxis preciosa para esto:

$coche = new Coche('Rojo', 'V8');
// Clona el coche y cambia SOLO el color en el nuevo objeto
$cocheAzul = clone $coche with {
    color: 'Azul'
};

Esto es genial para mantener nuestros objetos seguros e inmutables pero fáciles de trabajar.


🌐 Nueva Extensión URI

PHP 8.5 introduce una extensión nativa para manejar URLs de forma robusta. Olvídate de los problemas con parse_url(). Esta nueva extensión cumple con los estándares RFC 3986 y WHATWG.

$uri = new Uri\Rfc3986\Uri('https://usuario:pass@ejemplo.com:8080/ruta?query=1#fragmento');

echo $uri->getHost(); // ejemplo.com
echo $uri->getPort(); // 8080

// Modificar la URL es súper sencillo e inmutable
$nuevaUri = $uri->withPath('/nueva-ruta');

Por fin se estandariza el trabajar con URLs.


🧠 Límite de Memoria Estricto (max_memory_limit)

¿Alguna vez has tenido un script que devora memoria y se salta los límites? Seguro que si, yo un montón. Ahora tenemos una directiva INI llamada max_memory_limit.

Esta directiva actúa como un techo duro. Incluso si un script intenta subir su propio límite con ini_set('memory_limit', '-1'), no podrá superar lo que diga max_memory_limit. Es ideal para proveedores de hosting o para asegurar la estabilidad de tu servidor. O para ti, chapucillas, que siempre la acabas liando.


✨ Mejoras en Atributos

Los atributos siguen ganando poder. Ahora puedes usar:

class MiClase {
    #[Deprecated("Usa NUEVA_CONSTANTE en su lugar")]
    public const VIEJA_CONSTANTE = 1;
}

⚠️ Atributo #[NoDiscard]

A veces creamos funciones que devuelven algo importante, y si el programador ignora ese resultado, es probable que esté cometiendo un error. Imagina una función que te devuelve un error si algo falla, pero no lanza una excepción. Si ignoras el resultado, no te vas a enterar del fallo.

Ahora puedes marcar tus funciones con #[NoDiscard]:

#[NoDiscard]
function conectarBaseDatos(): bool {
    // ... lógica ...
    return false; // Falló
}

// Si haces esto, PHP te avisará:
conectarBaseDatos(); // ⚠️ Warning: Unused return value

Es una forma de decirle al desarrollador: ¡Eh Pavo! Lo que te devuelvo es importante, no lo ignores, que te reviento.


🗑️ Depreciaciones y Eliminaciones

Como en toda limpieza, hay cosas que se van. Aquí lo más importante que debes revisar:


✅ Conclusión

PHP 8.5 no reinventa la rueda, pero la hace girar mucho más suave. El operador Pipe y las funciones de array son cosas que usaremos todos los días.

Pos EA nos vemos en los bares chavales! 🍻