PHP 8.5 ya está aquí: el lenguaje clásico de la web se pone al día con URI nativa, operador pipe y clonación mejorada

PHP, uno de los lenguajes más veteranos y extendidos de la web, sigue decidido a no quedarse atrás en plena era de las APIs modernas, los microservicios y la inteligencia artificial. La versión PHP 8.5 ya es oficial y llega con un mensaje claro para desarrolladores y empresas: más legible, más segura y mejor preparada para las arquitecturas actuales.

Lanzada el 20 de noviembre de 2025, PHP 8.5 no es una simple actualización menor: introduce cambios de calado en el lenguaje, nuevas extensiones y mejoras en rendimiento y depuración que pueden influir directamente en el día a día de cualquiera que mantenga aplicaciones en producción.


URI como funcionalidad de primera clase

Uno de los grandes titulares de PHP 8.5 es la incorporación de una extensión URI integrada en el propio lenguaje. Hasta ahora, trabajar con URLs de forma robusta implicaba combinar funciones como parse_url() con librerías externas o código propio.

La nueva extensión:

  • Permite analizar, normalizar y manipular URLs de forma consistente.
  • Sigue los estándares RFC 3986 y WHATWG URL, los dos grandes referentes en la definición de direcciones en la web.
  • Se apoya en librerías consolidadas como uriparser (RFC 3986) y Lexbor (WHATWG URL).

En la práctica, esto significa que un desarrollador puede crear objetos de tipo Uri\Rfc3986\Uri y trabajar con métodos claros como getHost(), en lugar de extraer manualmente componentes de un array. Menos código “pegamento” y menos posibilidades de introducir errores sutiles en la manipulación de URLs, algo especialmente importante en aplicaciones que gestionan redirecciones, firmas de enlaces o comunicación entre servicios.


El operador pipe: código más legible y funcional

Otra de las novedades más llamativas de PHP 8.5 es la incorporación del operador pipe |>, que muchos desarrolladores conocen de otros lenguajes funcionales o modernos.

En versiones anteriores, era habitual encontrarse con bloques de código llenos de funciones anidadas:

$slug = strtolower(
    str_replace('.', '',
        str_replace(' ', '-',
            trim($title)
        )
    )
);
Lenguaje del código: PHP (php)

Con el nuevo operador pipe, PHP 8.5 permite escribir el mismo flujo de transformación de una forma más natural:

$slug = $title
    |> trim(...)
    |> (fn($str) => str_replace(' ', '-', $str))
    |> (fn($str) => str_replace('.', '', $str))
    |> strtolower(...);
Lenguaje del código: PHP (php)

La diferencia no es solo estética. Este enfoque:

  • Favorece un estilo de programación más declarativo, donde se leen las operaciones de izquierda a derecha.
  • Reduce la necesidad de variables intermedias y anidaciones difíciles de seguir.
  • Facilita la composición de funciones, algo muy útil en proyectos grandes o librerías reutilizables.

Para proyectos con lógica de negocio compleja o tuberías de datos (normalización de entradas, procesamiento de textos, filtros, etc.), el operador pipe puede convertirse rápidamente en una herramienta clave.


Clone With: clonar objetos modificando propiedades de forma segura

PHP 8.5 también incorpora una mejora importante en el manejo de objetos, especialmente útil para clases readonly y patrones inmutables: la capacidad de modificar propiedades durante el clonado usando una nueva sintaxis de clone() con array asociativo.

Hasta ahora, para implementar el patrón “with-er” en una clase inmutable, había que recurrir a técnicas algo rebuscadas, como extraer las propiedades con get_object_vars() y reconstruir el objeto.

Con PHP 8.5, es posible escribir algo mucho más directo:

readonly class Color
{
    public function __construct(
        public int $red,
        public int $green,
        public int $blue,
        public int $alpha = 255,
    ) {}

    public function withAlpha(int $alpha): self
    {
        return clone($this, [
            'alpha' => $alpha,
        ]);
    }
}
Lenguaje del código: PHP (php)

Este cambio:

  • Simplifica el diseño de objetos inmutables, cada vez más frecuentes en arquitecturas modernas.
  • Facilita la aplicación de patrones donde se crean nuevas instancias a partir de otras, cambiando solo un subconjunto de propiedades.
  • Reduce la cantidad de código repetitivo y minimiza posibles errores al reconstruir objetos complejos.

#[\NoDiscard]: menos errores silenciosos

Otra novedad relevante es el atributo #[\NoDiscard], pensado para aumentar la seguridad y robustez de las APIs.

Al marcar una función con este atributo, PHP 8.5 mostrará un aviso si el valor devuelto no se utiliza. Es decir, si un desarrollador llama a una función que devuelve un resultado importante, pero ignora esa respuesta por descuido, el lenguaje avisará en tiempo de ejecución.

Este atributo es especialmente útil en:

  • Funciones que devuelven objetos de estado, resultados de operaciones críticas o estructuras de configuración.
  • APIs donde olvidar usar el valor retornado implica perder una validación, una actualización o un cambio importante.

Si se quiere indicar explícitamente que se está ignorando el valor de forma consciente, se puede recurrir al patrón (void) para silenciar el aviso. Es una forma sencilla de forzar buenas prácticas y evitar errores silenciosos que solo aparecen mucho más tarde en producción.


Más expresividad en constantes y atributos

PHP 8.5 también da un paso adelante en el uso de funciones como valores en expresiones constantes. A partir de esta versión, es posible utilizar closures estáticas y first-class callables en contextos como:

  • Parámetros de atributos.
  • Valores por defecto de propiedades y parámetros.
  • Constantes de clase.

Esto permite escribir código más expresivo y flexible en áreas como control de acceso, validación o enrutado, sin recurrir a cadenas de texto evaluadas en tiempo de ejecución.


Mejor rendimiento en red con cURL persistente

En el terreno del rendimiento, una novedad interesante es la incorporación de manejadores cURL compartidos persistentes mediante curl_share_init_persistent().

A diferencia del enfoque clásico, en el que los manejadores compartidos se destruyen al final de cada petición PHP, esta nueva funcionalidad permite:

  • Reutilizar conexiones y recursos de cURL entre distintas peticiones con la misma configuración.
  • Reducir la sobrecarga de inicializar conexiones una y otra vez hacia los mismos hosts.
  • Mejorar el rendimiento de aplicaciones que dependen intensamente de llamadas HTTP externas, como servicios de terceros, microservicios internos o APIs.

Para backends que realizan muchas solicitudes por segundo, esta optimización puede traducirse en un ahorro notable de recursos y tiempos de respuesta.


Funciones de calidad de vida: array_first, array_last y más

PHP 8.5 también incorpora varias funciones y mejoras que, sin ser tan llamativas como el operador pipe, tienen un impacto directo en el código cotidiano:

  • Nuevas funciones array_first() y array_last() para obtener de forma directa el primer o último valor de un array, devolviendo null si está vacío.
  • Soporte de trazas de pila (stack trace) en errores fatales, lo que facilita la depuración de problemas críticos como tiempos de ejecución excedidos.
  • Nueva directiva INI max_memory_limit para establecer un techo absoluto por encima del clásico memory_limit.
  • Nuevas funciones get_exception_handler() y get_error_handler() para inspeccionar los manejadores actuales.
  • Nuevas utilidades relacionadas con internacionalización, como locale_is_right_to_left() y Locale::isRightToLeft, útiles para interfaces que deben adaptarse a idiomas de derecha a izquierda.

Son pequeñas mejoras que, sumadas, aportan comodidad y reducen la cantidad de código repetitivo o de “truco” necesario para resolver tareas sencillas.


Deprecaciones y cambios a tener en cuenta

Como en cualquier versión importante del lenguaje, PHP 8.5 también introduce deprecaciones y cambios de compatibilidad:

  • El operador de acento grave como alias de shell_exec() se considera obsoleto.
  • Se desaconsejan los nombres de cast no canónicos, como (boolean) o (integer), en favor de (bool) y (int).
  • Se emiten advertencias en situaciones ambiguas, como el casting de ciertos valores float a int o el uso de null como índice de array.
  • Los métodos mágicos __sleep() y __wakeup() pasan a estar soft-deprecated en favor de __serialize() y __unserialize().

Todo ello está recogido en la guía de migración oficial, que conviene revisar antes de actualizar proyectos complejos.


Un PHP más moderno, pero fiel a su esencia

Con PHP 8.5, el lenguaje refuerza una tendencia que se lleva viendo desde la rama 7.x: modernizarse sin romper con su base. La llegada del operador pipe, la extensión URI, las mejoras en clonación y los nuevos atributos apuntan a un PHP más legible, expresivo y seguro, sin dejar de ser el motor de millones de webs y aplicaciones en todo el mundo.

Para equipos que mantienen aplicaciones críticas, esta versión ofrece motivos claros para planificar una actualización: mejores herramientas de depuración, APIs más robustas, optimizaciones de rendimiento y un lenguaje más cómodo de leer y mantener.

La recomendación, como siempre, pasa por:

  • Probar primero en entornos de preproducción.
  • Revisar con calma la guía de migración.
  • Validar librerías y frameworks clave antes de mover sistemas en producción.

PHP no ha dicho su última palabra en la web moderna, y 8.5 es una confirmación más de que el lenguaje sigue muy vivo y en evolución constante.

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio
×