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.