Aller au contenu principal
Retour au blog

PHP 8.6 : ce qui est acté, et ce qui se joue encore

Flavien Métivier17 juillet 20266 min

Damien Seguy a publié un point d’étape utile sur PHP 8.6, attendu en version stable pour la fin 2026. À mi-parcours du cycle, la version compte déjà 7 RFC implémentées et 5 acceptées. Rien de spectaculaire pris isolément, mais un ensemble cohérent — et un dossier de fond qui rouvre : les generics.

Ce qui est déjà dans le pot (7 RFC implémentées)

  • clamp() — borne une valeur entre un min et un max, pour les entiers, flottants, chaînes et objets DateTimeInterface. Fini les max(min(...)) imbriqués.
  • Enums debuggables — les enums peuvent implémenter __debugInfo() pour personnaliser la sortie de var_dump.
  • Enum SortDirection — un enum natif non typé avec les cas Ascending et Descending.
  • Divers — méthodes de réflexion sur l’accessibilité des propriétés, mysqli_quote_string(), prise en charge du form feed dans trim(), et retrait du backend Oniguruma de mbstring.
<?php
// PHP 8.6 : clamp() natif
$volume = clamp($input, 0, 100);        // int/float
$page   = clamp($requested, 1, $maxPage); // borne la pagination

// avant 8.6
$volume = max(0, min(100, $input));

Ce qui est acté mais pas encore livré (5 RFC acceptées)

  • Optimisation des closures — inférence static automatique et mise en cache des closures sans état : environ 80 % de gain sur des benchmarks synthétiques.
  • Application partielle de fonction v2 — la syntaxe ? pour un argument et ... pour le reste, adoptée à l’unanimité (33 voix contre 0).
  • Endianness des flottants dans pack()/unpack(), et un durcissement des politiques de validation d’entrée.
<?php
// Application partielle de fonction v2
$trim = trim(...);          // référence de fonction
$clean = strtoupper(trim(?)); // ? = argument laissé libre

$names = array_map(ucfirst(?), $rawNames);

Envie d'aller plus loin ?

Réserver un appel découverte

Le retour des generics : « bound-erased »

C’est le sujet qui anime la communauté. La nouvelle proposition, dite « Bound-Erased Generic Types », tranche un vieux débat en faveur du pragmatisme : les paramètres de type sont effacés vers leur borne à l’exécution (erasure), et la forme d’origine n’est conservée que pour la Réflexion. Autrement dit, la validation reste du ressort de l’analyse statique (PHPStan, Psalm), pas du moteur au runtime.

Notre analyse

L’approche bound-erased est la bonne. Depuis des années, l’écosystème PHP fait déjà des generics « pour de faux » via les annotations @template de PHPStan/Psalm, et ça marche remarquablement bien en pratique. Formaliser cette réalité dans la syntaxe du langage — sans imposer un coût de vérification au runtime qui aurait plombé les performances — c’est reconnaître que le typage fort de PHP moderne vit d’abord dans l’outillage statique. Pour une équipe qui prend déjà PHPStan au sérieux, ce serait un gain de lisibilité sans rupture.

Le reste (clamp, closures optimisées, application partielle) relève de la finition qui rend le quotidien plus agréable. Rien qui justifie de précipiter une migration, mais un socle qui confirme la trajectoire d’un PHP à la fois plus rapide et plus expressif. Rendez-vous fin 2026 pour la GA.

Sources : « PHP 8.6 : ce qui est dans le pot, ce qui se joue encore » — Damien Seguy, relayé par Human Coders News.

Cet article vous a plu ? Partagez-le !

Envie d'aller plus loin ?

Discutons de votre projet et voyons comment je peux vous aider.