Die Ausgabe vom 24. September 2026 fasste zwölf Themen aus den PHP-Internals zusammen. PHP 8.6 wurde am Dienstag abgezweigt, der Feature-Freeze gilt, und der Entwicklungszweig zielt nun auf PHP 8.7. Der erste Release Candidate war für den 24. September vorgesehen. Seit sechs Wochen war kein Vorschlag zur Abstimmung gestellt worden.

Die Diskussion um den RFC für Time\Instant und Time\Clock ging nach der Eröffnung durch Tim Düsterhus und Derick Rethans weiter. Time\Instant beschreibt einen Zeitpunkt mit Nanosekundenpräzision. Die Klasse arbeitet ohne Zeitzone und ohne Berücksichtigung von Schaltsekunden. Sie kann die aktuelle Uhrzeit nicht selbst abfragen. Dafür definiert Time\Clock die Methode now(), während SystemClock die Systemimplementierung liefert. Tim sieht darin eine Grundlage für injizierbare Uhren. Seifeddine Gmati schlug eine statische now()-Methode und den Namen SystemTime vor. Instant sollte nach seiner Vorstellung für eine monotone Uhr reserviert bleiben. Tim verwies beim Namen auf Java und die Temporal-API von JavaScript. Eine Funktion Time\now() könnte in PHP 8.7 folgen. Larry Garfield unterstützte die Richtung und verlangte eine Roadmap für die gesamte Zeit-API. Er fragte auch nach dem Serialisierungsformat. Tim hielt eine Kontrolle der serialisierten Ausgabe für einen ungewöhnlichen Anwendungsfall.

Die wichtigste offene Frage im RFC PREG_THROW_ON_ERROR ist geklärt. Eine Ausnahme aus preg_replace_callback soll unverändert beim Aufrufer ankommen. Osama Aldemeery verwies auf Sprachen wie Python und Java mit demselben Verhalten. Seine Auswertung von 4.865 Paketen ergab, dass solche Callbacks 4,9 Prozent der Aufrufe von acht betroffenen Funktionen ausmachen. Tim Düsterhus bevorzugt nach wie vor ein Wrapping nach der allgemeinen Throwable-Regel, will es aber nicht erzwingen. Er forderte zwei Änderungen: Musterfehler wie Syntaxfehler sollen als PcreError gemeldet werden, und preg_last_error soll seinen bisherigen Wert behalten.

Gina P. Banyard stellte einen Pre-RFC für Regex\CompiledRegex samt Prototyp vor. Die Klasse nimmt ein unmarkiertes UTF-8-Muster und benannte boolesche Optionen wie case-sensitivity sowie multi-line-Matching entgegen, ergänzt durch dot-matches-newline. Trennzeichen und Modifikatorbuchstaben entfallen, wodurch auch der Aufruf von preg_quote hinfällig wird. Der Modifikator D ist dauerhaft aktiv. Für Fehler bei der Kompilierung ist Regex\CompilationError vorgesehen. Der Prototyp funktioniert bisher mit preg_split und preg_grep. Gina sieht darin eine mögliche Basis für eine objektorientierte Regex-API mit einem booleschen Ergebnis von match(), entwirft diese API aber noch nicht. Bis Mittwochabend gab es keine Antworten auf den Thread.

Ein Vorschlag zur Ausführung einer von einer PHP-Datei zurückgegebenen Closure über die CLI wurde nach etwa 24 Stunden zurückgezogen. Tim hatte ihn auf Bitte von Gina ausgearbeitet. Eine Datei sollte dadurch beim Einbinden als Bibliothek und beim direkten Aufruf als Kommando dienen. Seifeddine Gmati begrüßte den Ansatz. Rowan Tommins bevorzugte Hack’s #[EntryPoint]-Attribut, weil die Einstiegsmethode an jeder Stelle der Datei stehen könnte. Levi Morrison fragte nach der Beschränkung auf die CLI und verwies auf Symfony Runtime mit einer Closure im Front Controller. Larry Garfield hielt die automatische Ausführung eines Rückgabewerts für zu indirekt. Tim will nun eine __MAIN__-konstante mit dem Pfad des zuerst gestarteten Skripts prüfen. Alexandru Pătrănescu verwies darauf, dass realpath über den Dateinamen bereits dieselbe Information liefert.

Andrey Andreev stellte die Frage, ob PASSWORD_DEFAULT von bcrypt auf Argon2id wechseln sollte. Bcrypt kürzt Passwörter stillschweigend nach 72 Bytes. Argon2 kann libsodium oder seit PHP 8.4 auch OpenSSL verwenden. Casper Langemeijer sah die Abhängigkeit als Nachteil und Vorteil, da eine gepflegte Kryptobibliothek eigener Implementierung vorzuziehen sei. Anton Smirnov verwies auf eine Diskussion aus dem Jahr 2023, nach der Argon2 bei auf Anmeldungen abgestimmten Parametern schwächer als bcrypt sein könne. Tim Düsterhus bezeichnete 500 Millisekunden für interaktive Anmeldung als zu lang. Andrey maß für die Argon2-Standardeinstellungen etwa 240 Millisekunden, ähnlich wie bcrypt mit Kostenfaktor 12.

Jakub Zelenka erklärte, dass OpenSSL eine externe Shared Library ist und deshalb nicht für jeden Build garantiert werden kann. Eine verpflichtende Abhängigkeit würde einen eigenen RFC erfordern. Die weiterhin unterstützten Versionen OpenSSL 1.1.1 und 3.0 würden den Prozess zusätzlich verlängern. Andrey kam zum Schluss, dass eine Umstellung derzeit nicht vorankommt.

Sepehr Mahmoudi schlug str_mask einen Tag nach dem Rückzug von array_str_contains vor. Die Funktion soll einen Teil eines Strings durch ein wiederholtes Zeichen ersetzen, etwa bei Kartennummern und Telefonnummern. Osama Aldemeery verglich den Vorschlag mit substr_replace und str_repeat. Pratik Bhujel fand einen offenen Randfall: Ein Offset außerhalb des Strings ließ den Wert unmaskiert. Außerdem konnte ein mehrbyteiges Maskierungszeichen auf ein Byte gekürzt werden. Der Vorschlag wurde daraufhin auf eine ValueError-Ausnahme umgestellt. Eine #[SensitiveParameter]-Markierung kam zeitweise hinzu und wurde wieder entfernt, weil maskierte Werte nicht automatisch vertraulich sind. Laravel bietet mit Str::mask und CakePHP mit Text::mask ähnliche Funktionen. Beide behandeln Mehrbytezeichen und Randbereiche anders. Casper Langemeijer hielt die Operation im Userland für einfach. Weilin Du zeigte eine Umsetzung mit einer einzigen Speicherallokation durch substr_replace. Nach 30 Nachrichten war keine Abstimmung angesetzt.

Mehrere Beiträge stellten die mögliche Nutzung von KI bei neuen RFCs und Mailtexten infrage. Als Problem wurden die Qualität und die zusätzliche Prüfzeit genannt. Pratik Bhujel schlug die Reihenfolge Anwendungsfall, Vertrag und Benchmark vor. Er zog einen RFC zurück und baut und testet die Arbeit nun zuerst lokal. Juris Evertovskis erklärte, dass die Bewertung an der tatsächlichen Arbeit erfolgen werde.

Für den RFC IntlRelativeDateTimeFormatter steht nach einer Überarbeitung durch Weilin Du der 8. Oktober als möglicher Abstimmungsbeginn im Raum. Die neue Fassung verwendet Tims Enums und erhielt seine Zustimmung. Nick S. will die PEAR-Abstimmung am 28. September öffnen, sofern keine Einwände kommen.

Die Erweiterung php-terminal von Pratik Bhujel unterstützt den Raw-Modus und die Eingabe einzelner Tasten. Damit können Werkzeuge wie Laravel Prompts unter Windows geeigneter arbeiten. Die Installation erfolgt über PIE. Nach Tims Review verwendet der Entwurf den Namensraum Io\Terminal, unverbundene Enums, die Wiederherstellung des Terminals bei der Zerstörung des Objekts und eine API mit einem einzigen Objekt. Die Erweiterung gilt nun als Thema für PHP 8.7.

David Maye Kitenge fragte für ein geplantes Webframework als PHP-Erweiterung nach Request-Lebenszyklus und Threads. Rowan Tommins erklärte, dass die CLI die parallele Ausführung dem aufrufenden Prozess überlässt. Ein Thread pro Request würde einen thread-sicheren ZTS-Build erfordern. Eine einzelne Thread-Ausführung könnte Requests asynchron bearbeiten.