PHP 8.6 llegará el 19 de noviembre con aplicación parcial de funciones, clamp() y una clase Duration

PHP 8.6 ya tiene fecha: llega el 19 de noviembre de 2026. El calendario publicado en la página de preparación del lenguaje se ha ido cumpliendo sin sobresaltos desde julio, con tres alfas hasta el 30 de julio y la beta 1 el 13 de agosto, y el feature freeze se cerró el 22 de septiembre. Ahora tocan las release candidates, con la RC1 el día 24 de ese mismo mes y hasta cuatro más antes de la versión final. Los responsables de esta entrega son Daniel Scherzer, Matteo Beccati y Joe Ferguson.

Aplicación parcial de funciones

La novedad que más va a cambiar cómo se escribe PHP del día a día es la aplicación parcial de funciones (PFA). Permite fijar algunos argumentos de una función y quedarte con un closure que espera el resto. Se marca con un ? el hueco que rellenarás más tarde, y con ... el resto de argumentos:

$makeSlug = str_replace(' ', '-', ?);
$makeSlug('Hello World'); // Hello-World

$titles = array_map(strtolower(?), $titles);

El closure resultante conserva los nombres, tipos y valores por defecto de los parámetros originales. Los argumentos que pasas al crear la parcial se evalúan en ese momento, no cuando la llamas. Una RFC anterior con la misma idea se rechazó en 2021, pero esta segunda versión salió adelante por 33 votos a 0.

clamp(), una clase Duration y más azúcar sintáctico

También llega clamp(), una función que evita el típico min(max($valor, $min), $max) que tantas veces se escribe al revés: clamp(101, min: 0, max: 100) devuelve 100 sin que tengas que pensarlo dos veces. Funciona con cualquier tipo comparable, incluidas cadenas y objetos DateTime, y lanza un ValueError si el mínimo es mayor que el máximo.

Para medir tiempos aparece TimeDuration, una clase final y readonly con precisión de nanosegundo, métodos de fábrica por unidad (fromSeconds, fromMilliseconds...) y soporte para sumar, restar y comparar directamente con operadores. Según su RFC, la idea es que sirva de tipo común para que las funciones del núcleo y la nueva API de polling dejen de recibir enteros y floats sueltos.

Las propiedades readonly, por su parte, ya pueden llevar un valor por defecto, algo que antes daba error en tiempo de compilación y obligaba a rodeos para satisfacer interfaces con propiedades de solo lectura. La semántica readonly no cambia: la propiedad sigue sin poder reasignarse una vez inicializada.

Una API de polling y otras piezas para quien construye en serio

El nuevo espacio de nombres IoPoll unifica el acceso a epoll en Linux, kqueue en BSD y macOS, event ports en Solaris y WSAPoll en Windows, y sustituye a stream_select() para quien construye bucles de eventos o runtimes asíncronos, algo que ya se maneja a mano en librerías como ReactPHP. La propia RFC reconoce que la motivación principal es interna, de cara al manejo de señales y a mejoras en FPM, y que los frameworks de async en userland son un beneficiario secundario.

Quedan más piezas sueltas en esta versión. Los doc comments ya pueden ir directamente sobre los parámetros de una función, y ReflectionParameter::getDocComment() los recupera. Hay un enum global SortDirection con los casos Ascending y Descending para que las librerías dejen de inventar el suyo propio, y los enums por fin pueden implementar __debugInfo() para personalizar la salida de var_dump(). Los streams estrenan un modelo de errores unificado con más de 50 códigos semánticos en StreamErrorCode, y la extensión URI que llegó en PHP 8.5 gana clases builder para montar una URI sin crear un objeto intermedio por cada componente.

Hay también un cambio de calado en seguridad: tres valores por defecto de sesión en php.ini pasan a activarse solos en instalaciones nuevas: session.use_strict_mode, session.cookie_httponly y session.cookie_samesite, que pasa de no estar definido a valer Lax. Quien use sesiones nativas de PHP y dependa del comportamiento antiguo debería revisarlo antes de actualizar.

Todavía queda por delante una segunda tanda de release candidates antes de la disponibilidad general, así que algún detalle puede cambiar por el camino. Mientras tanto, en programacion.net puedes repasar qué trajeron PHP 8.5.8 y 8.4.23, las últimas versiones de mantenimiento antes de este salto.

Fuente: Laravel News.

COMPARTE ESTA NOTICIA

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP