PHP 8.6 se encuentra en fase beta y su lanzamiento general está previsto para el 19 de noviembre de 2026. Las versiones Alpha 1 a Alpha 3 se publicaron entre el 2 y el 30 de julio de 2026. Beta 1, con un soft feature freeze, llegó el 13 de agosto, y Beta 3 el 10 de septiembre. El feature freeze será el 22 de septiembre, RC 1 el 24 de septiembre y RC 4 el 5 de noviembre. Daniel Scherzer, Matteo Beccati y Joe Ferguson son los release managers.

clamp.php
<?php
echo clamp(10, min: 0, max: 100), PHP_EOL;
echo clamp(101, min: 0, max: 100), PHP_EOL;
echo clamp(-1, min: 0, max: 100), PHP_EOL;

La aplicación parcial de funciones permite crear una closure con algunos argumentos ya fijados. `?` reserva un argumento individual para más adelante, mientras `...` representa todos los argumentos restantes. La closure conserva los nombres, tipos y valores predeterminados de los parámetros originales. Los argumentos suministrados se evalúan al crearla. Un RFC posterior establece que cada parámetro marcado con `?` será obligatorio en la closure, aunque fuese opcional en la función original. La primera propuesta fue rechazada en 2021. La versión 2 se aprobó por 33 votos a 0.

`clamp()` devuelve el valor dentro de sus límites o el límite más cercano cuando queda fuera del intervalo. Funciona con tipos comparables, incluidos strings y objetos `DateTime`. Si `$min` es mayor que `$max`, se lanza `ValueError`. La función concentra en una API propia el patrón habitual `min(max($value, $min), $max)`.

PHP 8.6 incorpora `Time\Duration`, una clase final readonly para representar duraciones de cronómetro con precisión de nanosegundos. Incluye fábricas para cada unidad, operaciones aritméticas, comparaciones y creación desde cadenas de duración ISO 8601. Las funciones del núcleo y la nueva API de polling pueden aceptar este tipo común, que cubre valores que antes se expresaban con integers o floats sin una semántica compartida.

Las propiedades readonly pueden tener valores predeterminados. Antes de PHP 8.6, el compilador rechazaba esa declaración. La limitación dificultaba implementar con un valor fijo las propiedades de solo lectura exigidas por interfaces disponibles desde PHP 8.4. Una clase `CreateBooksTable implements Migration` puede asignar ahora `2026_01_01_create_books_table` a `$name`. Las reglas readonly no cambian y la propiedad no puede reasignarse después de su inicialización.

Los comentarios de documentación también pueden colocarse directamente sobre los parámetros. `ReflectionParameter::getDocComment()` los devuelve. Así, parámetros como `$query` y `$limit = 10` pueden documentarse junto a su declaración sin repetir el nombre en una etiqueta `@param` de la función. Los IDE y los analizadores estáticos pueden leer esas anotaciones.

El namespace `Io\Poll` unifica los mecanismos de polling de `epoll` en Linux, `kqueue` en BSD y macOS, event ports en Solaris y `WSAPoll` en Windows. Los event loops y runtimes asíncronos de userland disponen de `Context`, `Event` y `StreamPollHandle` para trabajar con sockets no bloqueantes. La API cubre el uso que antes se apoyaba en `stream_select()`. El objetivo principal del RFC es el manejo interno de señales y las mejoras de FPM. Los frameworks asíncronos forman una audiencia secundaria.

El enum global `SortDirection` incluye los casos `Ascending` y `Descending`. El núcleo de PHP todavía no lo acepta. Las bibliotecas pueden compartirlo como tipo común, por ejemplo en query builders. Los enums también pueden implementar `__debugInfo()`. PHP 8.6 elimina la restricción anterior porque este método no necesita estado, lo que permite controlar la salida de `var_dump()`.

Los streams reciben un modelo de errores unificado. La opción de contexto `error_mode` selecciona advertencias, excepciones o silencio. `stream_last_errors()` devuelve objetos estructurados `StreamError`. `StreamException` expone los errores recopilados, cuyos códigos pertenecen al enum `StreamErrorCode`, con más de 50 códigos semánticos. El sistema cubre operaciones como abrir `/nonexistent/file.txt` usando `StreamErrorMode::Exception`.

La extensión URI que llegó con PHP 8.5 incorpora clases builder. `Uri\Rfc3986\UriBuilder` puede construir mediante setters encadenados una URI con esquema `https`, host `example.com` y ruta `/foo/bar`. El RFC de seguimiento añade `getUriType()`, `getHostType()` y funciones para codificar por porcentaje componentes individuales de una URI.

Las nuevas instalaciones cambian tres valores predeterminados de las sesiones nativas. `session.use_strict_mode` pasa de `0` a `1`, `session.cookie_httponly` de `0` a `1`, y `session.cookie_samesite` queda en `Lax` frente al valor anterior sin definir. Laravel administra sus propias cookies de sesión, por lo que la mayoría de sus aplicaciones no cambia. Los proyectos que usan sesiones nativas de PHP deben revisar cualquier dependencia de los valores antiguos. La página de preparación de PHP 8.6, el índice de RFC aceptados y la lista de deprecaciones contienen el resto de la información de la versión.