PHP 8.6 tiene prevista su llegada para el 19 de noviembre de 2026. La versión descrita reúne cambios del lenguaje, nuevas APIs, mejores capacidades de I/O y valores predeterminados más seguros. También marca como obsoletas varias interfaces antiguas y conductas ambiguas.
La aplicación parcial permite fijar algunos argumentos y obtener una closure para los restantes. Un signo de interrogación identifica un argumento que llegará después. Tres puntos dejan abiertos los parámetros siguientes. Combinada con el operador pipe de PHP, esta función reduce las closures envolventes en las cadenas de transformación.
Los argumentos usados al crear una función parcial se evalúan de inmediato. Una arrow function ejecuta su expresión en cada llamada, un detalle relevante para estados cambiantes, tiempo y datos de la petición. La aplicación parcial no funciona con `new`, el acceso mágico a propiedades mediante `__get()` o `__set()`, ni funciones dependientes del ámbito del llamador como `extract()` y `func_get_arg()`. El resultado es una closure anónima. El nombre y los atributos de la función original no se conservan como ocurre con un callable de primera clase como `strlen(...)`.
Las propiedades readonly pueden declarar valores predeterminados. El atributo `#[\Override]` también comprueba las constantes de clase y genera un error cuando la clase padre o la interfaz no tiene un miembro correspondiente. Los enums pueden implementar `__debugInfo()` para controlar cómo aparecen en funciones como `var_dump()`.
La nueva clase `\Time\Duration` representa las duraciones de forma explícita. Métodos como `Duration::fromSeconds(5)` y `Duration::fromMilliseconds(500)` crean valores cuya unidad queda clara en el código. Una duración almacena segundos, nanosegundos y un indicador de signo. 1500 milisegundos se representan como un segundo y 500 millones de nanosegundos.
Las duraciones se pueden sumar, multiplicar y comparar directamente. Son inmutables, por lo que cada operación devuelve una instancia nueva. El modelo también sirve para retrasos de reintento y backoff exponencial.
PHP 8.6 añade `clamp()`, que mantiene un valor entre un límite inferior y otro superior. Funciona con números y con valores comparables como objetos de fecha. Una fecha posterior al 31 de diciembre de 2026 puede quedar limitada a esa fecha máxima.
Los errores de análisis de JSON incluirán su ubicación. Las opciones existentes son `json_last_error()`, `json_last_error_msg()` y `JSON_THROW_ON_ERROR`, que lanza una `JsonException`. PHP 8.6 puede señalar una posición como `1:3` para un error de sintaxis. Esta mejora trata la localización de fallos de parsing y no forma parte del RFC separado sobre validación de JSON Schema, que comprueba la estructura y el contenido requeridos por una aplicación.
El nuevo enum estándar `SortDirection` define `Ascending` y `Descending`. Las bibliotecas pueden usarlo para tipar la configuración de ordenación, convertir sus casos en `ASC` y `DESC` para SQL y transformar un parámetro HTTP antes de llamar a un repositorio.
La lista de caracteres que `trim()`, `ltrim()` y `rtrim()` eliminan por defecto incluye ahora el carácter de avance de página `\f`. El código que dependa de la lista anterior debe revisarse durante la actualización.
Devolver un valor desde `finally` queda obsoleto. Esa devolución puede sustituir el valor procedente de `try` o `catch`. Un `return;` sin valor sigue permitido para salir antes. `spl_object_hash()` también se deprecia, con `spl_object_id()` como API recomendada. La nueva función devuelve un entero, frente a la cadena anterior de 32 caracteres. También se deprecian los valores devueltos desde `__construct()` y `__destruct()`.
La limpieza abarca además `spl_classes()`, alias de tipos antiguos como `is_double()`, `strcoll()` y `metaphone()`, la conversión de objetos a arrays y determinados identificadores usados como nombres de clase o función. `let`, `is` y `readonly` quedan reservados para una posible sintaxis futura.
Los valores predeterminados de las sesiones son más estrictos. PHP 8.6 establece `session.use_strict_mode = 1`, `session.cookie_httponly = 1` y `session.cookie_samesite = Lax`. Estos ajustes limitan los identificadores de sesión proporcionados por atacantes, impiden que JavaScript acceda directamente a la cookie de sesión y reducen varios riesgos de solicitudes entre sitios. Las aplicaciones con autenticación entre sitios o acceso de JavaScript a cookies deben revisar su configuración.
La nueva API de polling ofrece una interfaz común para los mecanismos de espera de I/O del sistema operativo. Puede seleccionar `epoll`, `kqueue`, event ports, `WSAPoll` o `poll`. La función existente `stream_select()` se basa en la llamada `select()` y presenta límites de escalabilidad y de plataforma.
La API utiliza `Io\Poll\Context`, `Io\Poll\Event` y `StreamPollHandle` para observar flujos no bloqueantes. Un servidor TCP puede registrar un socket para `Event::Read`, esperar con `Context::wait()` y aceptar clientes cuando se produce el evento. Es un mecanismo de bajo nivel. No proporciona un modelo asíncrono completo ni un event loop. ReactPHP y Amp pueden construir abstracciones de bucle sobre esta base.
`Context::wait()` acepta un tiempo de espera `Time\Duration`. Una duración de cero comprueba eventos sin esperar. `null` espera indefinidamente. Las duraciones pueden expresar intervalos desde horas hasta nanosegundos. El ejemplo utiliza un tiempo de espera de 1500 milisegundos.
La migración recomendada avanza por etapas: analizar, ejecutar un dry run, revisar, aplicar, probar, medir y repetir. PHPCompatibility encuentra problemas de compatibilidad y depreciaciones en código que los tests no ejecutan. Rector automatiza reescrituras, siempre que se revise su diff de dry run y la cobertura del conjunto de reglas para PHP. PHPStan con reglas de depreciación detecta APIs obsoletas cuando sus stubs las conocen. Una baseline permite registrar el trabajo pendiente. Los tests muestran avisos de ejecución en las rutas que realmente recorren. La CI puede bloquear cualquier aumento en el número de depreciaciones.
PHP 8.6 continúa la evolución hacia valores tipados, diagnósticos más claros, sesiones con mejores valores de seguridad y polling de I/O integrado. La lista de depreciaciones concentra la mayor parte del trabajo de preparación.




Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.