El resumen del 24 de septiembre de 2026 reúne doce asuntos de los Internals de PHP. La rama de PHP 8.6 se creó el martes, la congelación de funciones está activa y la rama principal apunta ahora a PHP 8.7. El primer release candidate estaba previsto para el 24 de septiembre. Ninguna propuesta había llegado a votación durante seis semanas seguidas.

El RFC de Time\Instant y Time\Clock siguió generando debate después de que Tim Düsterhus y Derick Rethans lo abrieran. Time\Instant representa un punto de la línea temporal con precisión de nanosegundos. Carece de zona horaria e ignora los segundos intercalares. La clase no consulta por sí sola la hora actual. Time\Clock define now(), y SystemClock ofrece la implementación del sistema. Tim considera que este diseño facilita inyectar un reloj en el código. Seifeddine Gmati propuso un now() estático y el nombre SystemTime. Instant quedaría reservado para un reloj monotónico. Tim relacionó el nombre elegido con Java y con Temporal de JavaScript. Una función Time\now() podría llegar en PHP 8.7. Larry Garfield apoyó la dirección y pidió una hoja de ruta para toda la nueva API temporal. También preguntó por la serialización. Tim respondió que inspeccionar la salida serializada sería un caso de uso poco habitual.

La cuestión principal sobre los callbacks en el RFC PREG_THROW_ON_ERROR ya tiene una posición definida. Una excepción lanzada dentro de preg_replace_callback debe llegar al llamador sin envolverse. Osama Aldemeery citó lenguajes como Python y Java como ejemplos de este comportamiento. Su revisión de 4.865 paquetes encontró callbacks en el 4,9 % de las llamadas a las ocho funciones afectadas. Tim Düsterhus sigue prefiriendo el wrapping según la política general de throwables, aunque no quiere convertirlo en una exigencia. También pidió dos ajustes: los errores de sintaxis de los patrones deben convertirse en PcreError, y preg_last_error debe conservar su valor actual.

Gina P. Banyard publicó un pre-RFC para Regex\CompiledRegex con un prototipo. La clase recibe un patrón UTF-8 sin delimitadores y opciones booleanas con nombre, como la sensibilidad a la casse y la gestión multiligne, además de dot-matches-newline. Ya no hacen faltan las letras de modificador, prescindiendo también de una llamada a preg_quote. El modificador D queda activado siempre. Los errores de compilación usan Regex\CompilationError. El prototipo solo funciona por ahora con preg_split y preg_grep. Gina contempla una futura API de regex orientada a objetos cuyo método match() devuelva un booleano, pero todavía no la está diseñando. El hilo no tenía respuestas el miércoles por la noche.

Una propuesta para que la CLI ejecute una Closure devuelta por un archivo PHP fue retirada después de unas 24 horas. Tim la preparó a petición de Gina. La idea permitía usar el mismo archivo como biblioteca al incluirlo y como comando al ejecutarlo directamente. Seifeddine Gmati respaldó el enfoque. Rowan Tommins prefirió el atributo #[EntryPoint] de Hack, porque la función de entrada podría estar en cualquier lugar del archivo. Levi Morrison cuestionó que la solución se limitara a la CLI y mencionó Symfony Runtime, que ya devuelve una closure desde un front controller. Larry Garfield consideró demasiado indirecta la ejecución automática de un valor devuelto. Tim estudiará ahora una constante __MAIN__ con la ruta del primer script ejecutado. Alexandru Pătrănescu señaló que realpath aplicado al nombre del archivo ya proporciona ese dato.

Andrey Andreev preguntó si PASSWORD_DEFAULT debería cambiar de bcrypt a Argon2id. Bcrypt trunca silenciosamente las contraseñas después de 72 bytes. Argon2 puede utilizar libsodium u OpenSSL desde PHP 8.4. Casper Langemeijer describió la dependencia como una desventaja y una ventaja, porque una biblioteca criptográfica mantenida ofrece una base más sólida que el código propio. Anton Smirnov recordó una discusión de 2023 según la cual Argon2 podía ser más débil que bcrypt con parámetros orientados al inicio de sesión. Tim Düsterhus considera excesivos 500 milisegundos para una autenticación interactiva. Andrey midió unos 240 milisegundos con los valores predeterminados de Argon2, una cifra similar a bcrypt con coste 12.

Jakub Zelenka explicó que OpenSSL es una biblioteca compartida externa y no puede estar habilitada en todas las compilaciones. Convertirla en un requisito obligatorio necesitaría otro RFC. La compatibilidad vigente con OpenSSL 1.1.1 y 3.0 también alargaría el proceso. Andrey concluyó que el cambio del valor predeterminado no avanza por ahora.

Sepehr Mahmoudi propuso str_mask un día después de retirar array_str_contains. La función reemplazaría parte de una cadena por un carácter repetido, con usos en números de tarjeta y teléfonos. Osama Aldemeery la comparó con combinar substr_replace y str_repeat. Pratik Bhujel detectó que un offset fuera de rango dejaba el valor sin ocultar y que un carácter multibyte podía terminar reducido a un byte. La propuesta pasó a lanzar ValueError. También se añadió durante un tiempo #[SensitiveParameter], pero se eliminó porque un valor oculto no siempre es sensible. Laravel ofrece Str::mask y CakePHP ofrece Text::mask para una operación similar. Ambas API tienen comportamientos distintos con texto multibyte y límites. Casper Langemeijer consideró sencilla la implementación en espacio de usuario. Weilin Du mostró que substr_replace puede hacerlo con una sola asignación de memoria. Tras 30 mensajes, todavía no había votación programada.

Varias respuestas cuestionaron si algunos RFC y mensajes de la lista habían sido redactados con ayuda de IA. La preocupación se centró en la calidad y en el tiempo de revisión que exige el trabajo. Pratik Bhujel propuso demostrar primero el caso de uso, fijar después el contrato y medir luego la implementación. Retiró un RFC y empezó a construir y probar todo localmente. Juris Evertovskis afirmó que la evaluación debía basarse en el trabajo realizado.

La votación del RFC IntlRelativeDateTimeFormatter podría comenzar el 8 de octubre después de que Weilin Du lo actualizara para usar los enums de Tim. Tim aprobó la revisión. Nick S. planea abrir la votación sobre PEAR el 28 de septiembre si no aparecen objeciones.

La extensión php-terminal de Pratik Bhujel incorpora modo raw y lectura de una sola tecla. Esto permite que herramientas como Laravel Prompts funcionen correctamente en Windows. Se instala mediante PIE. Tras la revisión de Tim, el diseño utiliza el espacio de nombres Io\Terminal, enums no respaldados, restauración del terminal cuando se destruye el objeto y una API basada en un único objeto. El proyecto pasa a considerarse trabajo para PHP 8.7.

David Maye Kitenge preguntó por el ciclo de vida de las peticiones y los hilos para un framework web planeado como extensión de PHP. Rowan Tommins explicó que la CLI deja el paralelismo en manos del proceso que la ejecuta. Un hilo por petición exigiría una compilación ZTS segura para hilos. También se puede gestionar el trabajo de forma asíncrona en un solo hilo.