PHP 8.5 se publicó el 20 de noviembre de 2025. El artículo la presenta como la versión de destino casi un año después. Laravel 12 y 13 admiten PHP 8.3 a 8.5, las plataformas de hosting ofrecen PHP 8.5 y la siguiente versión de PHP está prevista para noviembre. El autor considera que el operador pipe es el mayor cambio de sintaxis de esta versión.

slug-pipeline.php
$title = ' PHP 8.5 Released ';
$slug = $title
 |> trim(...)
 |> (fn($str) => str_replace(' ', '-', $str))
 |> (fn($str) => str_replace('.', '', $str))
 |> strtolower(...);

El operador pipe envía el valor de la izquierda al callable de la derecha. Una cadena sigue el orden de ejecución de arriba abajo. Cada paso debe aceptar un argumento. La sintaxis de callable de primera clase, como trim(...), cubre las funciones con un argumento, y los demás casos usan una función flecha entre paréntesis. Los pipes funcionan con funciones normales de PHP y no necesitan un objeto Collection ni un wrapper. El ejemplo convierte " PHP 8.5 Released " en el slug "php-85-released".

PHP 8.5 incorpora una extensión URI integrada. Sigue los estándares RFC 3986 y WHATWG y devuelve un objeto. Esto ofrece una alternativa basada en estándares al resultado en forma de array de parse_url(). Uri\Rfc3986\Uri puede analizar https://php.net/releases/8.5/en.php, y getHost() devuelve "php.net".

Los objetos readonly pueden copiarse con un cambio de propiedad mediante clone($this, ['alpha' => $alpha]). El atributo #[\NoDiscard] avisa cuando el código descarta un valor de retorno que debería comprobarse. Un cast explícito a (void) marca un descarte intencionado. array_first() y array_last() permiten obtener directamente el primer y el último valor de un array. Ambas funciones devuelven null cuando el array está vacío.

Las closures estáticas y los callables de primera clase ahora pueden aparecer en expresiones constantes, incluidos los argumentos de atributos. Las reglas pueden escribirse como código comprobado por tipos, con menos dependencia de cadenas. También llegan los backtraces en errores fatales, curl_share_init_persistent() para reutilizar datos DNS y conexiones entre peticiones, #[\Override] para propiedades, final en la promoción de constructores, y get_error_handler() junto con get_exception_handler() para inspeccionar los manejadores instalados.

El operador backtick para ejecutar comandos de shell queda deprecado, con shell_exec('ls') como opción recomendada. Los nombres de cast (boolean), (integer), (double) y (binary) se sustituyen por (bool), (int), (float) y (string). Una clave null en un array debe convertirse en una clave explícita ''. Un case de switch terminado con punto y coma debe usar dos puntos. __sleep() y __wakeup() pasan a soft-deprecated, con __serialize() y __unserialize() como alternativa. La directiva INI disable_classes se eliminó sin reemplazo.

PHP 8.5 también genera avisos al convertir NAN, al desestructurar un valor que no es un array y al convertir un float demasiado grande para caber en un int. Las suites de pruebas deben ejecutarse mostrando las deprecaciones antes del despliegue. Para Laravel, el artículo recomienda pipes en helpers PHP, actions y data mappers, clone para DTO y value objects, y #[\NoDiscard] en métodos como save() cuando false indica un fallo.