L’équipe PHP a publié le 5 novembre 2026 la cinquième release candidate de PHP 8.6.0, nommée RC5. Il s’agit de la dernière étape de test avant la version stable, annoncée pour le 19 novembre. Au-delà de l’application partielle de fonctions tant attendue, cette mouture resserre nettement les réglages de sécurité des sessions, un changement qui touchera toute application PHP lors de la montée de version.
Une cinquième release candidate avant la version stable
RC5 fait suite à RC4, publiée le 21 octobre et qui corrigeait déjà deux vulnérabilités critiques d’exécution de code distant. Le calendrier de PHP 8.6 s’est étiré sur plusieurs mois de tests : RC2 a ouvert le cycle le 24 septembre après l’abandon de RC1 pour une erreur d’empaquetage, suivie de RC3 début octobre puis de RC4 fin octobre. L’équipe de publication insiste sur le fait que RC5 reste une version de test, à ne pas déployer en production.
Application partielle de fonctions et nouvelles fonctions utilitaires
La fonctionnalité la plus commentée reste l’application partielle de fonctions, issue d’une RFC qui avait été rejetée en 2021 avant de revenir sous une nouvelle forme adoptée à l’unanimité. Elle permet d’omettre certains arguments à l’aide d’un symbole d’espace réservé, sans écrire de fermeture intermédiaire. Le langage gagne aussi une fonction clamp() pour borner une valeur dans un intervalle, et les propriétés readonly peuvent désormais recevoir une valeur par défaut, ce qui était une erreur de compilation jusqu’en 8.5.
final class Pricing
{
public readonly float $vatRate = 0.20;
public function clampedDiscount(float $requested): float
{
return clamp($requested, 0.0, 0.30);
}
}
$applyVat = fn (float $amount, float $rate) => $amount * (1 + $rate);
$applyDefaultVat = $applyVat(?, 0.20); // application partielle
echo $applyDefaultVat(49.0);
Un nouveau sous-système pour les entrées-sorties asynchrones
PHP 8.6 introduit Io\Poll, une interface de scrutation unifiée au-dessus des mécanismes natifs de chaque plateforme (epoll sous Linux, kqueue sous BSD et macOS, WSAPoll sous Windows). Elle s’accompagne de classes comme Io\Poll\Context et Io\Poll\Watcher, et les flux existants peuvent y être rattachés via StreamPollHandle. Les fermetures profitent par ailleurs d’un cache pour les closures sans état, et array_map() utilisé avec un appelable de première classe se compile désormais en boucle foreach équivalente, sans allocation intermédiaire.
Des valeurs par défaut de session plus strictes
Le changement le plus structurant pour les applications existantes touche trois réglages INI liés aux sessions, désormais plus sûrs par défaut.
| Réglage | Avant 8.6 | À partir de 8.6 | Impact si non traité |
|---|---|---|---|
session.use_strict_mode | 0 | 1 | Un gestionnaire personnalisé qui accepte un identifiant de session externe sans entrée stockée doit implémenter validateId() ou create_sid() |
session.cookie_httponly | 0 | 1 | Le cookie de session n’est plus lisible depuis JavaScript, sauf remise à 0 explicite |
session.cookie_samesite | non défini | Lax | Les requêtes POST intersites ne reçoivent plus le cookie, sauf passage à None combiné à cookie_secure=1 |
Trois réglages de session passent d’un comportement permissif à un comportement restrictif par défaut, sans qu’aucune ligne de code applicatif n’ait à changer pour en bénéficier.
D’autres changements méritent une relecture du fichier UPGRADING avant la migration : de nombreuses fonctions lèvent désormais une ValueError en présence d’un octet NUL dans un argument chaîne, et preg_grep() retourne false plutôt qu’un tableau partiel en cas d’erreur PCRE. Les équipes qui pratiquent déjà une surveillance fine de leurs files d’attente, à l’image de ce que Laravel muscle de son côté, ont intérêt à exécuter leur suite de tests sous RC5 dès maintenant.
Ce qu’il faut retenir
PHP 8.6 entre dans sa dernière ligne droite avec RC5, publiée le 5 novembre pour une version stable le 19. L’application partielle de fonctions et l’API Io\Poll constituent les ajouts les plus visibles, mais le changement qui demande une action concrète est le resserrement des valeurs par défaut de session. Les équipes qui gèrent des gestionnaires de session personnalisés ou des flux intersites ont intérêt à tester dès maintenant plutôt qu’à découvrir le problème en production.
Sur les projets suivis cette année, la bascule de session.cookie_samesite vers Lax est précisément le genre de changement qui passe inaperçu en recette et qui remonte trois semaines plus tard sous la forme d’un ticket support incompréhensible sur un webhook ou un SSO qui ne fonctionne plus. Mieux vaut le traiter en amont, à froid, plutôt qu’en urgence le jour du déploiement — Simon Janvier.
Pour aller plus loin : l’annonce officielle de PHP 8.6.0 RC5 sur php.net.
