Les nouveautés de PHP 8.5 qui vont changer votre code !
PHP 8.5 arrive bientôt et apporte son lot de fonctionnalités attendues. Certaines vont simplifier votre code au quotidien, d'autres ouvrent de nouvelles possibilités pour les frameworks. Faisons le tour des nouveautés les plus marquantes.
Le pipe operator : enfin !
L'une des fonctionnalités les plus attendues fait son entrée : l'opérateur pipe (|>).
Vous connaissez cette situation ? Vous récupérez un email, vous le stockez dans une variable temporaire, vous le convertissez en minuscules, vous le stockez à nouveau... Et tout ça juste pour le passer à une fonction.
1public function sendEmail(string $to): void2{3 $email = $to;4 $email = strtolower($email);5 $this->send($email);6}
Avec le pipe operator, fini les variables intermédiaires. Vous chaînez directement les opérations :
1public function sendEmail(string $to): void2{3 $to4 |> strtolower(...)5 |> $this->send(...);6}
Le résultat de chaque fonction est automatiquement passé à la suivante. Plus lisible, plus concis, plus élégant.
PHP-INI=diff : la commande qui manquait
Une petite amélioration CLI qui va vous faire gagner du temps : la commande php --ini=diff.
Vous vous êtes déjà demandé quels paramètres de configuration vous aviez modifié par rapport aux valeurs par défaut ? Cette commande vous affiche exactement ça.
1php --ini=diff
Résultat : vous voyez instantanément que vous avez mis memory_limit à -1 et max_execution_time à 0. Les deux modifications que tout développeur PHP fait systématiquement.
Final sur les propriétés
PHP 8.5 permet maintenant d'utiliser le mot-clé final directement dans le constructeur avec la promotion de propriétés :
1class User2{3 public function __construct(4 final public readonly string $name5 ) {}6}
La propriété ne pourra pas être redéfinie dans les classes enfants. Utile pour certains cas d'usage, même si l'approche de mettre toute la classe en final reste souvent préférable.
Attributs sur les constantes globales
Nouveauté intéressante : vous pouvez maintenant ajouter des attributs sur les constantes globales.
1#[Deprecated("Utilisez Xdebug à la place")]2const HELP_URL = 'https://laravel.com';
Auparavant, tenter d'ajouter un attribut sur une constante globale provoquait une erreur de syntaxe. Désormais, c'est supporté et le code compile correctement.
NoDiscard : forcer l'utilisation des valeurs de retour
Voici une nouveauté qui mérite votre attention : l'attribut #[NoDiscard].
Certaines fonctions sont conçues pour retourner une valeur qui doit être utilisée. Prenons un exemple :
1function getName(): string2{3 return 'Ludo';4}5 6// Appel sans capturer le retour - bug potentiel7getName();
Avant PHP 8.5, aucun avertissement. Avec #[NoDiscard], c'est terminé :
1#[NoDiscard("Le nom ne doit pas être ignoré")]2function getName(): string3{4 return 'Ludo';5}6 7getName(); // Warning!
PHP vous avertira que la valeur de retour devrait être utilisée ou explicitement ignorée avec un cast vers void :
1(void) getName(); // OK, intention claire
Cette fonctionnalité fonctionne également avec le pipe operator, ce qui est particulièrement élégant.
Closures dans les expressions constantes
Voilà une fonctionnalité qui ouvre des possibilités fascinantes : les closures statiques dans les expressions constantes.
Vous pouvez maintenant utiliser des closures dans :
- Les constantes de classe
- Les valeurs par défaut des propriétés
- Les arguments d'attributs
- Les paramètres par défaut
1class Validator 2{ 3 public function __construct( 4 #[Required] 5 public string $title = '', 6 #[Validate(static function($value) { 7 return strlen($value) > 3; 8 })] 9 public string $name = ''10 ) {}11}
Cette fonctionnalité va permettre des validations plus puissantes directement dans les attributs, notamment pour des packages comme Livewire ou les formulaires Laravel.
Nouvelles fonctions pour les tableaux
Deux nouvelles fonctions rejoignent l'arsenal PHP pour manipuler les tableaux : array_first() et array_last().
1$persons = ['Adrian', 'Ludo', 'Taylor'];2 3$first = array_first($persons); // 'Adrian'4$last = array_last($persons); // 'Taylor'
Ces fonctions complètent array_key_first() et array_key_last() ajoutées en PHP 7.3. Elles ne modifient pas le tableau original et ne déplacent pas le pointeur interne.
Get Exception Handler
Pour les développeurs de frameworks, une nouvelle fonction arrive : get_exception_handler().
Jusqu'ici, vous pouviez définir un gestionnaire d'exceptions global avec set_exception_handler(), mais il n'existait aucun moyen standard de récupérer ce gestionnaire.
1set_exception_handler(function(Throwable $e) {2 echo "Exception capturée : " . $e->getMessage();3});4 5$handler = get_exception_handler(); // Récupère le closure
Laravel et autres frameworks pourront ainsi mieux gérer et composer les gestionnaires d'exceptions.
IntlListFormatter : des listes localisées
Une nouvelle classe fait son apparition dans l'extension Intl : IntlListFormatter.
Elle permet de formater des listes de manière localisée avec les bons connecteurs ("et", "ou") selon la langue :
1$formatter = new IntlListFormatter('fr_FR');2echo $formatter->format(['Lisbonne', 'Porto', 'Coimbra']);3// "Lisbonne, Porto et Coimbra"4 5$formatter = new IntlListFormatter('fr_FR', IntlListFormatter::TYPE_DISJUNCTION);6echo $formatter->format(['Lisbonne', 'Porto', 'Coimbra']);7// "Lisbonne, Porto ou Coimbra"
Particulièrement utile pour générer des textes multilingues proprement formatés.
PHP_BUILD_DATE : quand PHP a-t-il été compilé ?
Une nouvelle constante globale fait son apparition : PHP_BUILD_DATE.
1echo PHP_BUILD_DATE; // "Jul 8 2025 17:23:45"
Elle indique quand le binaire PHP que vous utilisez a été compilé. Utile pour le débogage et vérifier la fraîcheur de votre installation.
Conclusion
PHP 8.5 apporte un ensemble cohérent d'améliorations qui simplifient le code au quotidien. Le pipe operator et l'attribut NoDiscard vont rapidement devenir des incontournables, tandis que les closures dans les expressions constantes ouvrent de nouvelles architectures.
Ces fonctionnalités montrent que PHP continue d'évoluer intelligemment, en empruntant les meilleures idées d'autres langages tout en conservant sa philosophie. PHP ne meurt pas, il se réinvente constamment.
Quelle fonctionnalité allez-vous adopter en premier ?
A lire
Autres articles de la même catégorie
Top 10 des posts en 2022
L'année se termine !
Mathieu De Gracia
Rencontrez nous au Forum PHP !
Le Forum PHP 2022 est dans quelques jours, venez rencontrer les membres de Laravel France !
Mathieu De Gracia
Laravel Forge se réinvente avec le déploiement zéro downtime
Laravel Forge continue d’évoluer en 2025 avec le déploiement zero-downtime et bien plus encore !
Mathieu De Gracia