Deux scrutins RFC sont en cours cette semaine sur la liste des internals de PHP. Tim Düsterhus a ouvert vendredi le vote sur la classe Time\Duration : le scrutin principal (majorité des deux tiers requise) affiche 23 contre 1, et un second scrutin sur la nomenclature favorise les noms complets comme multiplyBy/divideBy plutôt que des abréviations comme mul/divBy, 18 contre 1. Pierre Joye, initialement opposé à cause de l'argument nanosecondes de fromSeconds(), a changé son vote en oui après avoir constaté que des constructeurs par unité répondaient déjà à son objection. Les deux votes se clôturent le 31 juillet.
Par ailleurs, Holly Schilling a annoncé préparer un RFC Value Structs pour après la fenêtre 8.6, estimant que Duration ferait un meilleur struct qu'une classe, idéalement livré en même temps que les structs dans PHP 9. Ilija Tovilo a signalé son propre brouillon structs-v2 existant ; Schilling a expliqué s'en être délibérément écartée pour séparer les comportements mutants et non mutants. Düsterhus a estimé que les améliorations de la bibliothèque standard ne devaient pas attendre une idée encore à l'état de brouillon.
Eric Norris a ouvert jeudi un second scrutin sur les versions minimales requises pour PHP 8.6. L'exigence d'autoconf 2.71 pour les builds git affiche 20 contre 3 avec 4 abstentions ; l'exigence de COM_RESET_CONNECTION, qui fixe un plancher à MySQL 5.7.3 ou MariaDB 10.2.4 pour que les connexions persistantes soient réellement réinitialisées, affiche 21 contre 0 avec 3 abstentions. Alexander Kurilo a demandé une option d'activation plutôt qu'une obligation, craignant que les bases plus anciennes perdent silencieusement la persistance ; Norris a répondu que MySQL 5.7.3 date de décembre 2013. Jakub Zelenka a voté non en raison de préoccupations sur la compilation sous Red Hat Enterprise Linux 8/9 ; Düsterhus a proposé de reporter ce changement précis au début de 8.7. Les deux votes se clôturent le 30 juillet.
Pierre Joye a ouvert samedi soir un vaste RFC pour gd 2.4, articulé en trois volets : la synchronisation de l'extension gd embarquée avec libgd en amont (nouveaux codecs QOI, JPEG XL et UltraHDR, GIF/WebP animés, TIFF multi-pages, véritable gestion des métadonnées), une API orientée objet Gd\ additionnelle, et un nouveau canevas vectoriel 2D bâti sur le rasterizer de FreeType avec un compositing à la Cairo. Sa période de discussion de 14 jours, courant jusqu'au 1er août, dépasse cependant l'échéance de PHP 9 : l'alpha 1 est sortie le 2 juillet et la date limite pour l'état final d'un RFC était le 14 juillet, soit quatre jours avant même l'ouverture du fil. Le release manager Matteo Beccati et Jakub Zelenka ont confirmé qu'aucune exception n'était possible sans modifier la politique elle-même. Joye a indiqué que l'implémentation, audit de sécurité inclus, était pratiquement terminée, mais que sa pull request était restée bloquée, l'approbation ayant été assignée à un relecteur automatisé qui ne pouvait jamais valider — il a fini par fusionner lui-même. gd 2.4 vise désormais la version suivant 8.6. Larry Garfield a de son côté demandé à la liste de mettre en pause les nouvelles propositions jusqu'au 1er septembre pour que les relecteurs se concentrent sur la finalisation de 8.6.
L'opérateur d'affectation par pipe |>= de Caleb White fait face à une proposition concurrente : Vadim Dvorovenko a publié un RFC d'affectation de gauche à droite utilisant le même jeton avec une sémantique opposée, mutable, estimant que cela dénaturerait le concept de pipe fonctionnel. Larry Garfield a fait basculer son vote sur la proposition de White vers non, mais Düsterhus a contesté son affirmation selon laquelle aucun RFC de pipe ne pourrait entrer dans 8.6, notant qu'un vote pourrait encore s'ouvrir le 27 juillet et se clore le 10 août avant le gel.
Le RFC strict-namespace de Paul M. Jones a passé la semaine à débattre de son nom plutôt que de son contenu : Rowan Tommins, Ilija Tovilo et Düsterhus (qui préfère global_fallback=0) se sont tous opposés au terme « strict ». Theodore Brown a rappelé avoir proposé une formulation similaire dès 2019. Benjamin Außenhofer a suggéré de séparer le vote sur le concept de celui sur le nom ; Tommins a averti que cela mettrait les partisans du concept mais opposants au nom dans une position inconfortable.
Nicolas Grekas a défendu son RFC sur les closures sérialisables après le vote défavorable d'Ilija Tovilo, expliquant que le véritable gain consiste à éviter aux frameworks de rejouer tout le pipeline de métadonnées à chaque requête, plutôt que de simplement mettre en cache un attribut. Il a refusé d'assouplir la conception sécuritaire face aux risques de gadgets, et a publié samedi la version 0.3, supprimant entièrement l'API de réflexion tout en conservant le support de serialize(), qu'il considère comme le socle de la plupart des systèmes de cache PHP.
La proposition de Wendell Adriel sur les déclarations de tableaux typés (syntaxe array<int, string> avec trois niveaux d'application) a rapidement essuyé des critiques : problèmes de sous-typage sur les tableaux mutables, chevauchement avec les travaux sur les génériques réifiés actuellement en pause, et une faille d'exécution dans des fonctions comme parse_str(). Larry Garfield a qualifié le type tableau de « déjà dangereusement surchargé » et a réclamé de vrais objets list, set et dictionary typés à la place ; Wendell a lui-même mis le RFC en attente et proposé son aide pour construire ces alternatives.
Juliette Reinders Folmer a analysé environ 450 000 fichiers parmi les 4 000 paquets les plus populaires de Packagist afin d'évaluer l'usage réel avant le vote sur la liste gelée des dépréciations de PHP 8.6. list() apparaît plus de 12 000 fois, ce qui l'amène désormais à s'opposer à sa dépréciation, contre 625 occurrences pour spl_object_hash() et 303 pour is_integer(), plusieurs autres propositions tombant à zéro. Gina P. Banyard a confirmé que les votes sur les dépréciations s'ouvriraient lundi 27 juillet, pour deux semaines, afin de se conclure avant 8.6.
Autres nouvelles : Go Kudo a relancé une extension user_cache autonome, découplée d'OPcache, redirigée vers PHP 8.7 (voire « 9 ») ; un correctif de performance quadruplant la vitesse des setters asymétriques non publics ne nécessite qu'une relecture de pull request, pas de RFC ; une proposition d'autoloading PSR-4 natif au moteur via spl_autoload_psr4_register() a émergé ; le projet TrueAsync a publié un pré-RFC pour une interface de planificateur asynchrone sans aucun changement visible pour l'utilisateur ; et Osama Aldemeery a reçu le karma RFC pour formaliser PREG_THROW_ON_ERROR.
Côté sorties, PHP 8.6.0alpha2, 8.5.9RC1 et 8.4.24RC1 ont été publiés cette semaine, l'alpha 3 et les versions finales de 8.5 et 8.4 convergeant le 30 juillet. Le calendrier de 8.6 prévoit un gel des fonctionnalités le 11 août et une bêta 1 le 13 août, tous les votes devant être clôturés avant cette date.