Sortie de PHP 8.5 : ce qu’il faut retenir
Publié le 27 octobre 2025
2025 touche bientôt à sa fin, et comme chaque année, notre dernier trimestre est bien rempli : entre nos différents événements (l’API Platform Conference, le Forum PHP ou encore la SymfonyCon Amsterdam qui approche), nos multiples projets et missions… mais surtout, l’arrivée de la version 8.5 de PHP prévue le 20 novembre prochain. C’est un peu Noël avant l’heure : voyons ensemble ce que la communauté nous réserve pour cette fin d’année.
#Les features à ne pas manquer
La syntaxe de PHP s’améliore régulièrement, notamment avec l’ajout de nouveaux opérateurs. Justement nous allons dès cette version avoir le pipe operator, symbolisé par |> en PHP. À noter que c’est un opérateur très populaire depuis de nombreuses années dans les langages Hack, R, F# et Elixir.
Après deux précédentes tentatives de RFC PHP échouées en 2016 et en 2020, cette fois la RFC a été adoptée et implémentée. Par conséquent, la fonctionnalité sera donc disponible dès la release officielle de la version.
Son but ? Rendre le code plus lisible lorsque vous devez enchaîner plusieurs opérations les unes après les autres. Concrètement, la valeur de gauche est passée en argument de la callable à la droite de ce nouvel opérateur. La force de cette nouvelle syntaxe est l’enchaînement de callables qui peut se faire.
Plutôt que d’empiler les fonctions comme des poupées russes (fonction_C(fonction_B(fonction_A(data)))), l'opérateur "pipe" permet d'écrire une séquence claire qui se lit naturellement de gauche à droite : data |> fonction_A |> fonction_B |> fonction_C. data est traité par la fonction A, puis la fonction B et enfin la fonction C. Notez qu’en empilant les fonctions, il fallait lire de droite à gauche !
Avant PHP 8.5, sans l'opérateur |>, vous deviez imbriquer les fonctions les unes dans les autres. Le code devient difficile à lire, car il faut le comprendre de l'intérieur vers l'extérieur :
// Difficile à lire : il faut commencer par le centre et remonter
$resultat = array_filter(
array_map(
strtoupper(...),
str_split(
htmlentities("Hello World")
)
),
fn($v) => $v !== 'O'
);
Avec le nouvel opérateur, vous pouvez écrire les opérations dans l'ordre où elles se produisent. C'est beaucoup plus naturel à lire, de haut en bas :
// Facile à lire : étape par étape
$resultat = "Hello World"
|> htmlentities(...)
|> str_split(...)
|> fn($x) => array_map(strtoupper(...), $x)
|> fn($x) => array_filter($x, fn($v) => $v !== 'O');
Avec PHP 8.5 arrive une nouvelle extension URI, intégrée directement au cœur du langage depuis la validation de la RFC. Plus besoin d’extension PHP ou de librairie tierce, tout est disponible dès l’installation. Une avancée majeure qui simplifie enfin la gestion des URL après des années de contournements et de solutions maison.
La fonction parse_url() montre aujourd’hui ses limites : elle n’est pas conforme aux standards et peut facilement introduire des bugs. Voici comment la nouvelle extension URI fait la différence :
- La nouvelle API analyse les URL de manière fiable et fournit une API robuste qui évite les bugs à l’usage.
- Aussi, elle est conforme aux standards (spécification URL WHATWG, RFC 1738 et RFC 3986).
- Cela vous permet de modifier des parties d'URL, comme le port ou le chemin, de manière fiable et sans risque d'erreur.
Découvrez tous les détails sur l’extension URI ici.
Fini les erreurs fatales mystérieuses en PHP “vanilla”
La RFC Error Backtraces V2, qui fait suite à celle de 2020, change la donne pour le debug. Son objectif principal est de nous faire gagner un temps précieux.
Avant, quand votre script plantait à cause d'une erreur fatale (par exemple en dépassant la limite de mémoire), PHP se contentait d’afficher : Fatal error: ... in ... on line 6. Impossible de savoir quelle chaîne de fonctions avait provoqué l'erreur. Maintenant avec PHP 8.5, pour la même erreur, PHP fournit enfin la pile d'appels complète (stack trace) :
Fatal error: Allowed memory size .... in index.php on line 1
Stack trace:
#0 file.php(...): str_contains('A', $myString)
#1 file.php(...): my_function()
#2 {main}
La fonctionnalité est activée par défaut, ce qui peut vous faire gagner des heures de recherche. Si vous voulez découvrir comment cette fonctionnalité a été implémentée, consultez la PR.
Les nouveautés qui simplifient le quotidien
Issu de cette RFC et de son implémentation dans PHP 8.5, PHP propose désormais deux nouvelles fonctions très attendues. Leur objectif : simplifier la manipulation des tableaux.
array_first($array): Récupère directement la première valeur d'un tableau.array_last($array): Récupère directement la dernière valeur d'un tableau.
C'est une solution simple et lisible. Elle complète idéalement les fonctions de clés array_key_first() et array_key_last(). Le vrai bénéfice concerne surtout les hashmaps (plus connus sous le nom de tableaux associatifs ou “dictionnaires”). Pour les listes, c’est facile : l’index 0 fait très bien le travail. Mais imaginons un panier où l'ordre d'ajout est important, mais les clés sont des identifiants (SKU-XXX) :
$panier = [
'SKU-902' => 'T-shirt PHP',
'SKU-123' => 'Mug Éléphant'
];Avant PHP 8.5, pour lire la première valeur, il fallait soit utiliser reset() et current(), soit faire ceci :
$cle = array_key_first($panier);
$premierProduit = $panier[$cle]; // "T-shirt PHP"Maintenant, seulement ce code est disponible :
$premierProduit = array_first($panier); // "T-shirt PHP"
C'est une opération directe, lisible et sans effet de bord (là où reset() touche au pointeur interne du tableau, une vraie source de bug si on n’est pas attentif). Si le tableau est vide, les 2 nouvelles fonctions retourneront null.
Nouvelle commande de debug : php --ini=diff
PHP 8.5 introduit une nouvelle commande très pratique pour le débogage : php --ini=diff.
Plus besoin d’utiliser grep ou d’autres outils pour examiner votre configuration PHP modifiée : cette commande affiche directement les valeurs qui diffèrent des valeurs par défaut. Avant, il fallait chercher manuellement dans le contenu pour repérer les changements. Aujourd’hui, une seule commande fournit un rapport clair :
Non-default INI settings:
html_errors: "1" -> "0"
max_execution_time: "30" -> "0"
date.timezone: "UTC" -> "Europe/Amsterdam"Il ne reste plus qu’à adapter votre configuration, et vous pouvez vous concentrer sur vos tâches à fortes valeurs ajoutées. Fini les recherches fastidieuses dans vos fichiers de configuration. Pour en savoir plus, consultez l’implémentation de cette fonctionnalité dans PHP.
À vos côtés pour migrer vos projets PHP
Une nouvelle version de PHP implique une migration. Sans les bons outils et les bonnes pratiques, le projet peut rapidement devenir complexe. Notre équipe d’expert·es est là pour vous accompagner. Composée de core maintainers de PHP, contributeurs et mainteneurs de frameworks populaires, ainsi que de collaborateur·rices certifié·es, elle peut :
- Auditer votre application existante.
- Vous accompagner dans votre projet de migration.
- Optimiser vos processus de travail.
Contactez-nous pour en savoir plus, ou venez nous rencontrer prochainement à la SymfonyCon 2025. Nous serons une quinzaine de coopérateurs et coopératrices disponibles sur place sur notre stand, mais aussi sur la scène du Beurs van Berlage !



