PHP 8.5 : 5 nouveautés qui vont changer votre façon de coder
Par Mendel · 01/10/2026 à 00:28
Sortie fin 2025, PHP 8.5 poursuit la modernisation du langage entamée avec PHP 8.0. Pas de révolution cette fois, mais une série d'ajouts très pratiques qui rendent le code plus lisible et plus sûr au quotidien. Voici les cinq nouveautés qui m'ont le plus marqué.
1. L'opérateur pipe
C'est sans doute la nouveauté la plus visible. L'opérateur |> permet d'enchaîner des transformations en passant le résultat de chaque étape à la suivante, de gauche à droite.
Avant PHP 8.5, il fallait imbriquer les appels et les lire de l'intérieur vers l'extérieur :
$slug = strtolower(str_replace(' ', '-', trim($titre)));
Avec le pipe, le code se lit dans l'ordre où il s'exécute :
$slug = $titre
|> trim(...)
|> (fn (string $texte) => str_replace(' ', '-', $texte))
|> strtolower(...);
La syntaxe trim(...), introduite en PHP 8.1, transforme une fonction en callable. Pour une fonction qui attend plusieurs arguments, on passe par une fonction fléchée, obligatoirement entourée de parenthèses.
2. array_first() et array_last()
Récupérer le premier ou le dernier élément d'un tableau a toujours été étonnamment pénible : reset() et end() modifient le pointeur interne du tableau, et array_key_first() ne renvoie que la clé. PHP 8.5 ajoute enfin deux fonctions simples :
$articles = ['bienvenue' => 'Bienvenue sur le blog', 'php85' => 'Les nouveautés de PHP 8.5'];
array_first($articles); // 'Bienvenue sur le blog'
array_last($articles); // 'Les nouveautés de PHP 8.5'
array_first([]); // null
Elles fonctionnent aussi bien avec les tableaux indexés qu'avec les tableaux associatifs, et renvoient null si le tableau est vide.
3. Modifier une propriété en clonant un objet
Les propriétés readonly sont idéales pour créer des objets immuables, mais produire une copie légèrement modifiée demandait jusqu'ici beaucoup de code. PHP 8.5 permet de passer les nouvelles valeurs directement à clone() :
final readonly class Article
{
public function __construct(
public string $titre,
public string $statut = 'brouillon',
) {
}
public function publier(): static
{
return clone($this, ['statut' => 'publie']);
}
}
$brouillon = new Article('Les nouveautés de PHP 8.5');
$publie = $brouillon->publier();
echo $brouillon->statut; // brouillon
echo $publie->statut; // publie
L'objet d'origine reste intact, et on obtient une nouvelle instance avec la propriété modifiée. C'est le motif with-er que l'on retrouve dans de nombreuses bibliothèques, désormais intégré au langage.
4. L'attribut NoDiscard
Certaines fonctions renvoient une valeur qu'il ne faut surtout pas ignorer : un résultat de validation, un objet modifié, un code d'erreur. Avec l'attribut #[\NoDiscard], PHP émet un avertissement si le résultat d'un appel n'est pas utilisé :
#[\NoDiscard('La liste des erreurs doit être vérifiée')]
function valider(array $donnees): array
{
// ...
return $erreurs;
}
valider($formulaire); // Avertissement : la valeur de retour est ignorée
$erreurs = valider($formulaire); // OK
Si l'on veut vraiment ignorer le résultat, PHP 8.5 introduit aussi le cast (void), qui rend l'intention explicite :
(void) valider($formulaire);
C'est un filet de sécurité simple contre une catégorie de bugs très sournoise : celle où le code semble fonctionner, alors que le résultat d'une opération importante est silencieusement perdu.
5. Une vraie API pour les URL
Analyser une URL avec parse_url() a toujours été approximatif, avec des comportements surprenants sur les cas limites. PHP 8.5 intègre une nouvelle extension URI, qui respecte les standards officiels et propose une API orientée objet :
use Uri\Rfc3986\Uri;
$uri = new Uri('https://exemple.fr/blog?page=2');
echo $uri->getHost(); // exemple.fr
echo $uri->getPath(); // /blog
echo $uri->getQuery(); // page=2
Une amélioration bienvenue pour la sécurité : les différences d'interprétation des URL entre plusieurs outils sont une source classique de failles.
Et le reste ?
PHP 8.5 apporte aussi de nombreuses améliorations plus discrètes, comme l'affichage de la pile d'appels lors des erreurs fatales, bien pratique pour déboguer, ou la possibilité d'utiliser des closures dans les expressions constantes. Le détail complet est disponible dans la documentation officielle de PHP.
Si vous travaillez avec Symfony 8, bonne nouvelle : le framework exige déjà PHP 8.4 minimum, et tout fonctionne parfaitement avec PHP 8.5. Ce blog tourne d'ailleurs dessus.
Et vous, laquelle de ces nouveautés allez-vous utiliser en premier ? Dites-le en commentaire !
Commentaires (0)
Aucun commentaire pour le moment.