Auf der PHP-Internals-Mailingliste laufen diese Woche zwei RFC-Abstimmungen. Tim Düsterhus eröffnete am Freitag die Abstimmung zur Klasse Time\Duration: Die Hauptabstimmung (Zweidrittelmehrheit erforderlich) steht bei 23:1, eine zweite Abstimmung zur Benennung favorisiert ausgeschriebene Methodennamen wie multiplyBy/divideBy gegenüber Abkürzungen wie mul/divBy mit 18:1. Pierre Joye, der wegen des Nanosekunden-Arguments von fromSeconds() zunächst gegen den Vorschlag war, stimmte um, nachdem er feststellte, dass Konstruktoren pro Zeiteinheit sein Anliegen bereits abdecken. Beide Abstimmungen enden am 31. Juli.
Unabhängig davon kündigte Holly Schilling an, nach dem 8.6-Fenster einen Value-Structs-RFC vorzubereiten – sie argumentiert, Duration passe besser als Struct denn als Klasse und beides sollte idealerweise gemeinsam in PHP 9 landen. Ilija Tovilo verwies auf seinen eigenen structs-v2-Entwurf; Schilling erklärte, sie habe bewusst davon abgewichen, um verändernde und nicht-verändernde Funktionalität zu trennen. Düsterhus meinte, Verbesserungen an der Standardbibliothek sollten nicht auf eine noch unfertige Idee warten.
Eric Norris eröffnete am Donnerstag eine zweite Abstimmung zu den Mindestversionsanforderungen für PHP 8.6. Die Pflicht zu autoconf 2.71 für Git-Builds steht bei 20:3 mit 4 Enthaltungen; die Pflicht zu COM_RESET_CONNECTION, die MySQL 5.7.3 bzw. MariaDB 10.2.4 als Mindestversion setzt, damit persistente Verbindungen tatsächlich zurückgesetzt werden, steht bei 21:0 mit 3 Enthaltungen. Alexander Kurilo plädierte stattdessen für eine Opt-in-Lösung und warnte, ältere Datenbanken würden Persistenz stillschweigend verlieren; Norris entgegnete, MySQL 5.7.3 stamme bereits aus Dezember 2013. Jakub Zelenka stimmte wegen Bedenken zum Build auf Red Hat Enterprise Linux 8/9 dagegen; Düsterhus bot an, diese Änderung auf frühes 8.7 zu verschieben. Beide Abstimmungen enden am 30. Juli.
Pierre Joye eröffnete am Samstagabend einen umfangreichen RFC für gd 2.4 mit drei Bausteinen: Synchronisation der gebundelten gd-Erweiterung mit dem Upstream-libgd (neue Codecs QOI, JPEG XL und UltraHDR, animiertes GIF/WebP, mehrseitiges TIFF, echte Metadaten), eine zusätzliche objektorientierte Gd\-API sowie eine neue 2D-Vektor-Canvas auf Basis des FreeType-Rasterizers mit Cairo-ähnlichem Compositing. Sein 14-tägiges Diskussionsfenster bis zum 1. August liegt jedoch nach dem Stichtag für PHP 9: Alpha 1 erschien am 2. Juli, die Frist für den finalen RFC-Status war der 14. Juli – vier Tage bevor der Thread überhaupt eröffnet wurde. Release-Manager Matteo Beccati und Jakub Zelenka bestätigten, dass ohne Änderung der Richtlinie keine Ausnahme möglich sei. Joye erklärte, die Implementierung inklusive Sicherheitsaudit sei praktisch fertig gewesen, doch sein Pull Request sei hängen geblieben, weil die Freigabe einem automatisierten Bot-Reviewer zugewiesen war, der nie zustimmen konnte – er habe schließlich selbst gemergt. gd 2.4 zielt nun auf die Version nach 8.6. Larry Garfield bat die Liste unabhängig davon, neue Vorschläge bis zum 1. September zurückzustellen, damit sich Reviewer auf den Abschluss von 8.6 konzentrieren können.
Caleb Whites Pipe-Zuweisungsoperator |>= steht in Konkurrenz zu einem Gegenvorschlag: Vadim Dvorovenko veröffentlichte einen Left-to-Right-Assignment-RFC, der dasselbe Token mit entgegengesetzter, verändernder Semantik nutzt, und argumentiert, dies untergrabe das funktionale Pipe-Konzept. Larry Garfield stimmte gegen Whites Vorschlag, doch Düsterhus widersprach Garfields Behauptung, kein Pipe-RFC könne es noch in 8.6 schaffen – eine Abstimmung könnte demnach noch am 27. Juli beginnen und am 10. August vor dem Freeze enden.
Paul M. Jones' Strict-Namespace-RFC verbrachte die Woche hauptsächlich mit einer Debatte um den Namen statt um den Inhalt: Rowan Tommins, Ilija Tovilo und Düsterhus (der global_fallback=0 bevorzugt) lehnten alle den Begriff "strict" ab. Theodore Brown wies darauf hin, dass er ähnliche Formulierungen bereits 2019 vorgeschlagen hatte. Benjamin Außenhofer schlug vor, Konzept und Name getrennt abstimmen zu lassen; Tommins warnte, dies zwinge Befürworter, die den Namen ablehnen, zu einer unangenehmen Entscheidung.
Nicolas Grekas verteidigte seinen RFC zu serialisierbaren Closures, nachdem Ilija Tovilo dagegen gestimmt hatte, und argumentierte, der eigentliche Nutzen liege darin, die von Frameworks bei jedem Request wiederholte Metadaten-Verarbeitung zu überspringen, nicht im Caching eines einzelnen Attributs. Er lehnte Lockerungen am Sicherheitsdesign gegen Gadget-Risiken ab und veröffentlichte am Samstag Version 0.3, die die Reflection-API vollständig streicht und nur die serialize()-Unterstützung behält, da diese laut Grekas die Grundlage der meisten PHP-Cache-Systeme bildet.
Wendell Adriels Vorschlag für typisierte Array-Deklarationen (Syntax array<int, string> mit drei Durchsetzungsstufen) stieß schnell auf Widerstand wegen Problemen bei der Subtypisierung veränderlicher Arrays, Überschneidungen mit den derzeit pausierten reified-Generics-Arbeiten sowie einer Lücke bei Funktionen wie parse_str(). Larry Garfield bezeichnete den Array-Typ als "bereits gefährlich überladen" und forderte stattdessen echte typisierte List-, Set- und Dictionary-Objekte; Wendell legte den RFC selbst auf Eis und bot an, an diesen Alternativen mitzuarbeiten.
Juliette Reinders Folmer durchsuchte rund 450.000 Dateien aus den Top-4.000-Paketen von Packagist, um die reale Nutzung vor der Abstimmung über die eingefrorene Deprecation-Liste für PHP 8.6 einzuschätzen. list() taucht über 12.000-mal auf, weshalb sie sich nun gegen dessen Deprecation ausspricht – im Vergleich dazu kommt spl_object_hash() auf 625 und is_integer() auf 303 Treffer, mehrere andere Vorschläge landen bei null. Gina P. Banyard bestätigte, dass die Deprecation-Abstimmungen am Montag, den 27. Juli, beginnen und zwei Wochen laufen, um rechtzeitig vor 8.6 abgeschlossen zu sein.
Weitere Themen: Go Kudo brachte eine eigenständige, von OPcache entkoppelte user_cache-Erweiterung zurück, die auf PHP 8.7 (oder "9") verschoben wurde; eine vierfache Performance-Verbesserung für nicht-öffentliche asymmetrische Setter benötigt bestätigt keinen eigenen RFC, sondern nur ein Pull-Request-Review; ein Vorschlag für engine-natives PSR-4-Autoloading über spl_autoload_psr4_register() kam auf; das TrueAsync-Projekt veröffentlichte einen Vor-RFC für eine asynchrone Scheduler-Schnittstelle ohne sichtbare Änderungen für Anwender; und Osama Aldemeery erhielt RFC-Karma, um PREG_THROW_ON_ERROR zu formalisieren.
Bei den Releases erschienen diese Woche PHP 8.6.0alpha2, 8.5.9RC1 und 8.4.24RC1, wobei Alpha 3 sowie die GA-Releases von 8.5 und 8.4 am 30. Juli zusammenlaufen. Der Zeitplan für 8.6 sieht den weichen Feature-Freeze am 11. August und Beta 1 am 13. August vor – alle Abstimmungen müssen davor abgeschlossen sein.