news php

Cette semaine dans les composants internes de PHP | 8 juillet 2026

Bonjour tout le monde, nous sommes le mercredi 8 juillet 2026 et voici ce qui s’est passé cette semaine dans PHP Internals.

L’épisode de cette semaine vous est présenté par Ballast. Votre équipe expédie constamment, mais quelle part de ce travail est réellement effectuée dure? Ballast lit votre historique git et calcule une valeur déterministe score de durabilité: le code expédié tient-il le coup, ou s’annule-t-il et est-il refait ? Ballast est désormais en accès anticipé sur ballast.now.

L’actualité de la semaine reste celle de Gina P. Banyard. Dépréciations pour PHP 8.6 – le paquet annuel où chaque suppression obtient son propre bulletin de vote – et cette semaine, il a pris feu deux fois. Premier feu : la question du long terme. Avec Seifeddine Gmati list() dépréciation déjà sur la table, Tim Düsterhus a lancé un projet qui tourne array() dans une véritable fonction de casting – et Michael Morris a éclaté là où cette route mène. Il a demandé : « Êtes-vous fou ? — dépréciant array() selon ses calculs, toucherait les 3 quarts du cœur de WordPress et presque tous les plugins. Le compteur de Seif n’était que des reçus : la réécriture en est une ast-grep commande, array(...) et [...] compiler vers opcodes identiques en octets – et, pour mémoire, « La proposition est de déprécier list(), pas array(). » Puis Juliette Reinders Folmer – qui maintient les normes de codage WordPress – a corrigé tout le monde: WordPress prend toujours en charge PHP 7.4et les réseaux courts y ont été bloqués pendant des années par une poignée de committers principaux, et non par la communauté.

C’est devenu personnel – Morris a dit à Seif de sortir de sa tour d’ivoire ; Seif n’arrêtait pas de répondre avec ingénierie. Il a écrit : « J’ai écrit un compilateur qui a migré une base de code de plusieurs millions de lignes d’un langage à un autre, automatiquement, du jour au lendemain. Remplacer un nœud AST par un autre qui est littéralement équivalent au compilateur n’est pas un exploit de courage technique. Au crédit de Morris, lorsqu’on lui a dit qu’il devenait personnel, il a répondu : « Je le suis et je m’excuse. » — et le fil s’est refroidi.

Puis lundi, il s’est rallumé – terminé preuve. Gina a regroupé la liste, intégré les nouveaux éléments qui lui ont été envoyés directement et réglé l’horloge : « Si aucun n’est ajouté ou modifié, je lancerai un appel au vote la semaine prochaine. » Rowan Tommins a dénombré 35 propositions et seulement 8 avec une discussion sur les personnes concernées, et a menacé de voter 27 fois contre. Gina a tracé sa ligne : « Vous êtes libre de faire ce que vous voulez. » — elle ne produira pas des métriques pour le bien des métriques sans méthode convenue. Rowan a tenu bon : « Je ne pense pas que nous devrions supprimer des fonctionnalités sans penser à qui sera affecté. Honnêtement, je suis choqué que ce soit une opinion controversée ». Juliette, une fois de plus le pont, a renouvelé son offre de générer des données d’impact réel avec PHPCompatibility – réalisable, dit-elle, pour environ 25 des 36 éléments. Un élément est en voie de disparition : la dépréciation du modificateur de retour par référence – Bob Weinand a recommandé une rétractation complète, et son proposant en avait déjà proposé une. La RFC se fige 13 juillet – attendez-vous à l’appel au vote la semaine prochaine, mais avec le délai de récupération obligatoire de 14 jours après les derniers changements de Gina, les scrutins réels sont ouverts 21 juillet au plus tôt.

Tim Düsterhus et Derick Rethans Time\Duration classe – l’objet de valeur du chronomètre destiné à 8.6 – j’ai été appelé fait cette semaine : « nous considérerions que la RFC est complète ». Les décisions finales : add et sub a remporté un sondage informel sur Slack de la PHP Foundation à l’unanimité; les suffixes de méthode au passé ont disparu ; divideInto() a été poussé vers une portée future ; et l’interdiction des arguments négatifs du constructeur reste, à l’appel de Derick. Une question de dénomination est adressée aux électeurs à titre de vote secondaire : les noms complets comme multiplyBy et absoluteou des abréviations comme mul et abs — les abréviations nécessitant une majorité qualifiée des 2 tiers.

Mais un combat pas fermer: fromSeconds(). Cela prend quelques secondes plus un argument de nanosecondes, plafonné à 999 millions 999 mille 999 — le débordement est rejeté, non porté. Marc B. a objecté : « Cela simplifie le raisonnement pour vous quant à la mise en œuvre – cela impose le fardeau à celui qui utilise l’API. » Pierre Joye a apporté l’art antérieur : Java et Rust portent tous deux le débordement au lieu de le rejeter, et Temporal de JavaScript n’impose pas non plus de plafond. La défense de Tim : un constructeur injectif signifie une valeur, une orthographe — un formulaire demandant des secondes devrait rejeter les entrées hors plage de la même manière que le 31 juin devrait être rejeté, et non devenir silencieusement le 1er juillet. Aucune des deux parties n’a bougé — et une fois la RFC terminée, cette question se poursuit jusqu’au vote.

La fonction de chargement automatique a désormais 2 modèles concurrentset ils se sont rencontrés dans la même boîte de réception le même jour. Paul M. Jones a mis à jour son RFC mark-5 — c’est la tentative numéro 5 — en ajoutant un declare(strict_namespace=1) directive pour éliminer le cas de repli global, ainsi que des recherches sur les 1000 meilleurs packages Packagist : exactement 2 les forfaits et 8 sites d’appels se comporteraient mal. Pendant ce temps, Michael Morris – fraîchement sorti du fil des dépréciations – avait lancé une idée le 2 juillet, disant : « Une idée qui m’est venue à l’esprit il y a une heure, que je n’ai pas d’autre développeur PHP à qui parler, et si vous pouviez enregistrer une fonction appelée par PHP la première fois qu’il voit un espace de noms déclaré ? Cinq jours plus tard, ce spitball était un brouillon formel : les rappels du chargeur automatique qui prennent 2 arguments – la classe et l’espace de noms – se déclenche la première fois que le moteur rencontre un espace de noms. Et quelques heures après la mise à jour de Paul, Morris était dans le fil de discussion de Paul faisant la publicité de son rival.

La raison pour laquelle le spitball a fait pousser des jambes est Rowan Tommins. Son approbation est devenue l’épine dorsale du projet de Morris – il a écrit: « Cela évite très bien le problème de séquence globale contre espace de noms que le chargement automatique des fonctions rencontre toujours: au moment où le moteur atteint un nom non qualifié, le chargeur d’espace de noms a déjà exécuté pour l’espace de noms actuel et a défini toutes les fonctions qu’il souhaite.  » Tout le monde n’est pas vendu. Aleksander Machniak a signalé ce décès null aux chargeurs automatiques de type chaîne existants est en soi une rupture en Colombie-Britannique, et Alex Rock a fait valoir que le projet regroupe 2 propositions différentes et l’a qualifié d’exagéré. La réponse de Morris avait un certain avantage : « Et vous avez complètement mal lu la proposition. »

Le tout nouveau fil de discussion le plus chargé : Matheus Martins relancé fermetures dactylographiées – écrire Closure(int): bool en tant que type de paramètre, et un rappel incompatible échoue à la limite avec une TypeError propre au lieu d’exploser au plus profond de votre filter(). L’accueil a été chaleureux — Matthew Weier O’Phinney le trouverait « très utile », et Larry Garfield y est favorable, sans surprise. Rob Landers a suggéré d’attendre les génériques ; Seif a souligné qu’il faudrait des génériques variadiques, qui ne sont jamais apparus dans n’importe lequel proposition – attendre les génériques signifie attendre indéfiniment. Larry a été plus direct : « La syntaxe générique n’est pas le bon format à utiliser pour cela, point final. » Le vrai méchant est le lexer: à l’intérieur Closure(int)que (int) est un lancer un jeton. Osama Aldemeery, qui a emprunté exactement ce tunnel, l’a dit de manière mémorable : « L’orthographe naturelle est donc, malheureusement, celle qui est hostile aux moteurs. »

Là où cela a atterri : les signatures en ligne d’abord, nommées alias de type plus tard, et aucune ne bloque l’autre. Larry a devancé l’objection que tout le monde pouvait voir venir : si quelqu’un s’inquiète des longues signatures, la réponse devrait être « c’est bien, allez travailler sur les alias alors et ne bloquez pas cette RFC ». Lundi, il avait ajouté une seule demande : les objets invocables devaient passer par la même porte, et non être coincés à travers les fermetures.

Celui de Rob Landers constructeurs principaux — le constructeur hissé sur la ligne de classe — a passé le mois de juin à se battre pour savoir s’il pouvait transporter un corps. Cette semaine, ce combat a atteint sa fin, en une seule journée de publications. Rowan Tommins est sorti de la clôture – avec un corps boulonné, il serait définitivement Non. Rob, l’auteur, a refusé de relancer le débat : « Tout ce que je peux dire, c’est que je le rejette pour une portée future, à plusieurs reprises. » Nick Sdot s’est retiré en signe de protestation, avertissant : « Nous n’avons pas besoin de fonctionnalités à moitié terminées, à moitié inutilisables et déroutantes en PHP. » Et puis, tranquillement, le seul fan sans réserve de la semaine – un lecteur qui a écrit qu’étendre les classes tierces et appeler manuellement le constructeur parent « semblait toujours sale ». Le fil est silencieux depuis le 1er juillet.

Celui de Michal Kral méthodes d’objets scalaires — (3)->pow(2)expédié au moment de la compilation – est revenu pour le deuxième tour, et la salle l’a dirigé vers un nouvel endroit. Michal a cédé du terrain : il restreindrait ou abandonnerait le formulaire dépendant de l’ordre des fichiers et s’appuierait sur les locaux dactylographiés pour des raisons de sécurité. Seif est resté impassible, arguant : « En voyant $s->trim() où $s est une chaîne, je devrais savoir que cela fonctionne. Une construction où un AST identique distribue ou non en fonction de la position du fichier, d’un casting redondant ou du fait qu’une déclaration se trouve au-dessus ou en dessous de l’appel n’est pas quelque chose sur lequel les gens peuvent raisonner. » Puis Larry Garfield a recadré toute la conversation : un petit ensemble organisé de méthodes, a-t-il dit, « est un appât pour les vélos et est inutilement limitant » – et à contre-courant à la manière de Kotlin fonctions d’extension sur n’importe quel type, à partir d’un dessin qu’il a rédigé avec Sara Golemon. La réponse de Michal ? Vraiment intéressé. Ils parlent hors liste une fois que Larry revient de vacances.

Au tableau d’affichage : un scrutin fermé, un autre jamais ouvert. Celui de Jordi Kroon documentation d’extension tierce RFC est dans: 26 contre 1, avec 1 abstention. Les secondaires se sont également installés : les docs atterrissent sur un php.net sous-chemin plutôt qu’un nouveau sous-domaine, 15 à 8, et les anciennes notes utilisateur sont supprimées lors du déplacement, 21 à 4. Pendant ce temps, le grapheme_mask vote annoncé pour le 3 juillet ? Pour autant que nous puissions le savoir, c’est jamais ouvert – la page RFC indique toujours brouillon, et les commentaires sont restés gentils mais fermes. Yuya Hamada a écrit : « Merci beaucoup pour votre RFC. Mais passer à la phase de vote est trop rapide. » Le pipeline à venir est chargé : les déprédateurs attendent son appel au vote la semaine prochaine, et Duration termine son temps de recharge juste à temps pour le gel de la mi-août.

Des coups rapides – et il y a un parcelleil s’agit donc d’un tour à 2 diapositives. Le 2 juillet était le jour du patch : versions de sécurité pour 8.28.38.4et 8.5et 8.6.0 alpha 1 est sorti pour les tests. Eric Norris et Tim Düsterhus ont publié les versions minimales prises en charge RFC – autoconf plus récent et MySQL 5.7.3 ou MariaDB 10.2.4 pour les connexions persistantes — et un testeur anonyme a rapidement trouvé une véritable fuite de connexion sur l’ancien MySQL, déclarant : « Il y a une fuite de connexion ici ! — Eric a trouvé la cause et réfléchit à une solution. Nicolas Grekas redessiné fermetures sérialisables et a proposé une solution de repli allégée, poussant la liste qui 8.6 n’attendra pas. Oussama Aldemeery a lancé un PREG_THROW_ON_ERROR flag — implémentation déjà construite. Et Nick Sdot a posté un minuscule RFC : valeurs par défaut activées readonly propriétés, une suppression de 5 lignes – aucune réponse jusqu’à présent.

J’y vais toujours. Les types scalaires littéraux se sont transformés en une confrontation entre énumérations et littéraux, où Nick a averti : « Nous ne devrions pas faire de PHP un autre TypeScript. » Ben Ramsey a ajouté une section Fondation-SIG à Groupes de travail et veut des commentaires avant de le voter – ou de le retirer. L’expérience DTLS est passée à une expérience de travail 1.2 bifurquer; Jakub Zelenka veut un projet de PR. Pierre Joye a synchronisé GD fourni avec libgd 2.4 et démêle les dépendances de Windows. Les assistants du terminal de Pratik Bhujel ont obtenu la bénédiction de Derick : expédiez-le via PIE, puisque PECL n’accepte aucun nouveau colis. Et Pratik a également demandé si la réparation sscanfc’est %c bug d’espacement – en place depuis PHP 4.3.2 – brise n’importe qui sur le maître.

Voilà donc la semaine : une liste de dépréciations qui s’est battue sur WordPress puis sur les preuves, avec l’appel au vote dans quelques jours ; un RFC de durée terminé et attendant la fin de son temps de recharge ; 2 réponses rivales à la fonction de chargement automatique entrant en collision en temps réel ; des fermetures tapées gagnant la pièce pendant que le lexer tient la porte ; et le scrutin qui s’est terminé par 26 voix contre 1. Les liens vers chaque fil de discussion se trouvent ci-dessous. Nous sommes une construction artisanale. Rendez-vous la semaine prochaine.

Articles similaires