La RFC d'Ilija Tovilo sur l'optimisation des closures a été adoptée par le vote internals avec 24 voix pour, 0 contre et 1 abstention. Le vote s'est clos le 13-03-2026 à 14h00 UTC ; l'implémentation se trouve dans la pull request 19941 de php-src.
La RFC couvrait deux optimisations : un cache pour les closures sans état, qui apporte l'essentiel du gain de performance, et l'inférence de closures statiques, qui aurait traité automatiquement comme static les closures n'utilisant pas $this. Interrogé par Kamil Tekiela, Tovilo a confirmé que les projets marquant déjà leurs closures statiques en bénéficieraient, tout en soulignant que le marquage explicite reste préférable. L'inférence visait les codebases qui omettent static pour éviter l'encombrement visuel ou ignorent les implications de performance.
Après la clôture du vote, Tovilo a découvert un cas limite : une closure peut passer un callable comme 'Foo::instanceCall' à array_map ; elle n'utilise pas $this et ne viole aucune règle d'inférence, pourtant une méthode d'instance est invoquée. Ce cas n'étant pas détectable de manière fiable, il a retiré l'inférence et ne fusionnera que le cache de closures sans état.
En pratique : le code annotant toutes ses closures pertinentes en static obtient le plein bénéfice de performance, le code non annoté n'en tire rien. La RFC a été mise à jour avec une section errata, et Tovilo a invité d'éventuelles objections à cette implémentation partielle.
Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.