2026-05-13
PHP 8.5: novedades principales
Un repaso practico por las mejoras mas importantes de PHP 8.5: URI, pipe operator, clone with, NoDiscard y cambios de compatibilidad.

PHP 8.5 fue lanzado el 20 de noviembre de 2025 como una nueva version menor del lenguaje. No es un cambio tan disruptivo como saltar de PHP 7 a PHP 8, pero si trae varias mejoras que hacen el codigo mas expresivo, mas seguro y un poco mas comodo para trabajar en aplicaciones modernas.
La idea general de PHP 8.5 es clara: menos codigo accidental, mejores APIs nativas y mas herramientas para escribir programas que sean faciles de leer.
Nueva extension URI
Una de las novedades mas importantes es la extension URI. Hasta ahora, muchas aplicaciones dependian de parse_url(), librerias externas o validaciones propias para trabajar con URLs.
PHP 8.5 agrega una API nativa para parsear y manipular URIs siguiendo estandares como RFC 3986 y WHATWG URL.
use Uri\Rfc3986\Uri;
$uri = new Uri('https://example.com/blog/php-85?ref=home');
echo $uri->getHost(); // example.com
echo $uri->getPath(); // /blog/php-85
Esto es especialmente util para frameworks, routers, clientes HTTP y cualquier sistema que necesite tratar URLs con cuidado.
Pipe operator
El nuevo operador |> permite encadenar transformaciones de izquierda a derecha. Es una forma mas legible de escribir operaciones que antes terminaban como funciones anidadas.
Antes:
$slug = strtolower(
str_replace(' ', '-',
trim(' PHP 8.5 Novedades ')
)
);
Ahora:
$slug = ' PHP 8.5 Novedades '
|> trim(...)
|> (fn ($value) => str_replace(' ', '-', $value))
|> strtolower(...);
La ventaja no es solo estetica. El flujo se lee en el mismo orden en que ocurre: toma este valor, limpialo, transformalo y conviertelo.
Clone with
PHP 8.5 tambien mejora el patron de objetos inmutables con clone(). Ahora puedes clonar un objeto y cambiar algunas propiedades en el mismo paso.
readonly class Money
{
public function __construct(
public int $amount,
public string $currency,
) {}
public function withAmount(int $amount): self
{
return clone($this, [
'amount' => $amount,
]);
}
}
Esto hace mas natural trabajar con objetos readonly, value objects y modelos donde no quieres mutar el estado original.
Atributo NoDiscard
El atributo #[\NoDiscard] sirve para marcar funciones o metodos cuyo valor de retorno no deberia ignorarse.
#[\NoDiscard]
function createToken(): string
{
return bin2hex(random_bytes(16));
}
createToken(); // advertencia: el resultado se ignoro
Esto ayuda en APIs donde llamar la funcion sin usar el resultado suele ser un bug. Es una mejora pequena, pero muy buena para librerias y codigo critico.
array_first y array_last
PHP 8.5 agrega array_first() y array_last(), dos funciones simples pero practicas para obtener el primer o ultimo valor de un array.
$events = ['login', 'purchase', 'logout'];
echo array_first($events); // login
echo array_last($events); // logout
Si el array esta vacio, devuelven null. Hay que recordar que null tambien puede ser un valor valido dentro del array, asi que en algunos casos conviene validar la lista antes.
Mejoras en errores y debugging
Los errores fatales ahora pueden incluir stack trace. Eso vuelve mas facil entender que paso cuando ocurre un limite de memoria, un timeout u otro fallo fuerte.
Tambien llegan dos funciones nuevas:
get_error_handler();
get_exception_handler();
Antes podias registrar handlers con set_error_handler() y set_exception_handler(), pero no habia una forma directa de consultar el handler actual. Esto mejora integraciones con frameworks, librerias de observabilidad y sistemas de testing.
Mas cambios interesantes
PHP 8.5 trae varias mejoras adicionales:
- Los atributos pueden aplicarse a constantes.
#[\Override]tambien puede usarse en propiedades.#[\Deprecated]puede marcar traits y constantes.- Las propiedades estaticas soportan visibilidad asimetrica.
Closure::getCurrent()facilita recursion dentro de funciones anonimas.setcookie()ysetrawcookie()soportan la clavepartitioned.- Intl agrega herramientas nuevas como
IntlListFormatter. - CLI agrega
php --ini=diffpara ver configuraciones INI que difieren de los valores por defecto.
Deprecaciones que debes mirar
Como toda version menor moderna, PHP 8.5 tambien limpia algunas partes antiguas del lenguaje.
Algunas de las deprecaciones mas relevantes:
- El operador de backticks como alias de
shell_exec()queda deprecado. - Los casts no canonicos como
(boolean),(integer),(double)y(binary)quedan deprecados. __sleep()y__wakeup()quedan soft-deprecated frente a__serialize()y__unserialize().- Terminar
casecon punto y coma en vez de dos puntos queda deprecado. - Usar
nullcomo offset de array o enarray_key_exists()queda deprecado.
Si mantienes proyectos antiguos, estas son las areas que conviene revisar antes de actualizar.
Conclusion
PHP 8.5 no cambia la forma completa de programar en PHP, pero si pule muchas zonas del lenguaje. La extension URI, el pipe operator y clone with son las mejoras mas visibles. #[\NoDiscard], los nuevos handlers y las funciones de arrays apuntan a algo igual de importante: hacer que el codigo comun sea mas claro y menos propenso a errores.
Para proyectos nuevos, PHP 8.5 es una base muy atractiva. Para proyectos existentes, la actualizacion deberia empezar por revisar deprecaciones, correr tests y prestar atencion a librerias que trabajen con URLs, serializacion, errores o procesos shell.
Fuentes
- PHP.net: lanzamiento oficial de PHP 8.5. https://www.php.net/releases/8.5/index.php
- PHP.Watch: resumen de cambios en PHP 8.5. https://php.watch/versions/8.5
- PHP.Watch: calendario de releases PHP 8.5. https://php.watch/versions/8.5/releases