introduction
PHP 8.5 débarque officiellement le 20 novembre 2025, et cette nouvelle version promet de belles surprises. Comme à chaque itération, le langage gagne en modernité et en élégance. Pour les développeurs Laravel, cette version apporte son lot d'améliorations concrètes : un code plus lisible, moins de répétitions inutiles et des fonctionnalités de débogage renforcées. Dans cet article, nous allons explorer ensemble — simplement et visuellement — les nouveautés qu'elle introduit.
1. L’opérateur pipe (|>)
Avec PHP 8.5, on peut désormais chaîner des methodes de façon native et fluide.
$numbers = [1, 2, 3, 4, 5];
$result = $numbers
|> array_map(fn($n) => $n * 2, ...)
|> array_filter(..., fn($n) => $n > 5)
|> array_sum(...);
// $result = ( [2,4,6,8,10] -> filter >5 -> [6,8,10] ) sum = 24
Pourquoi c’est utile
- Au lieu de faire plusieurs variables temporaires ou d’imbrication compliquée, on enchaîne les appels étape par étape.
- Dans un projet Laravel, quand vous traitez des collections, des API ou des flux de données, vous pouvez gagner en lisibilité.
2. Fonctions natives array_first() et array_last()
PHP 8.5 ajoute deux fonctions très simples mais longues à venir pour récupérer le premier et le dernier élément d’un tableau.
$users = [
'u23' => 'Alice',
'u45' => 'Bob',
'u67' => 'Charlie',
];
echo array_first($users); // « Alice »
echo array_last($users); // « Charlie »
$empty = [];
var_dump(array_first($empty)); // NULL
var_dump(array_last($empty)); // NULL
Pourquoi c’est utile
- Avant, on utilisait reset($array) ou end($array), ce qui pouvait modifier le pointeur interne du tableau ou être moins fiable.
- Avec ces fonctions, le code devient plus simple, clair, sans effets de bord.
- Dans un contexte Laravel (par exemple, quand vous transformez une collection en tableau), c’est pratique pour récupérer rapidement un élément sans bricolage.
3. Nouvelle extension URI conforme aux standards (RFC 3986 + WHATWG)
PHP 8.5 introduit une extension « URI » pour manipuler les URL/URI de façon moderne et conforme aux standards.
use Uri\WhatWg\Url;
$url = new Url('http://exemple.com:80/path/to/page?ref=laravel#section');
// Supposons que par défaut le port 80 pour http est implicite
if ($url->getPort() === 80) {
$url = $url->withPort(null);
}
echo $url->toString(); // « http://exemple.com/path/to/page?ref=laravel#section »
echo $url->toRawString(); // « http://exemple.com:80/path/to/page?ref=laravel#section »
Pourquoi c’est utile
- Jusqu’ici, beaucoup de projets utilisaient parse_url() ou des packages tiers pour manipuler les URL. Ce n’était pas toujours fiable.
- Avec cette extension, vous avez une API plus moderne, immuable, fluide.
4. Récupérer la fermeture (closure) en cours d’exécution
Une autre nouveauté : la méthode statique Closure::getCurrent() permet de récupérer la fermeture en cours, ce qui facilite par exemple la récursion anonyme.
$countdown = function (int $n) {
echo $n . PHP_EOL;
if ($n <= 1) {
echo "🚀 C’est parti !" . PHP_EOL;
return;
}
// On récupère la même fonction pour s’appeler à nouveau
$fn = Closure::getCurrent();
// Appel récursif
$fn($n - 1);
};
$countdown(5);
// result
5
4
3
2
1
🚀 C’est parti !
Pourquoi c’est utile
- Avant, pour des fonctions anonymes récursives, on devait attribuer la fermeture à une variable puis l’appeler à l’intérieur.
- Maintenant, c’est plus simple et plus propre. Dans un projet Laravel ou package, si vous utilisez beaucoup de closures et de callbacks, cela peut aider à avoir une architecture plus élégante.
5. Back-traces pour les erreurs fatales & option INI Diff
PHP 8.5 améliore le débogage : La directive fatal_error_backtraces permet d’afficher une trace complète lorsqu’une erreur fatale survient. Le flag php --ini=diff permet de voir rapidement les valeurs INI modifiées par rapport aux valeurs par défaut.**
Fatal error: Uncaught Error: Call to undefined function ...
Stack trace:
#0 /home/site/app/Service/MyService.php(42): …
#1 /home/site/app/Http/Controllers/MyController.php(28): MyService->doSomething()
#2 {main}
Grâce à fatal_error_backtraces=1, vous voyez exactement quelle ligne, quel fichier a déclenché l’erreur.
Et avec php --ini=diff, vous pouvez exécuter en CLI :
$ php --ini=diff
Non-default INI settings:
memory_limit: "128M" -> "256M"
display_errors: "0" -> "1"
Pourquoi c’est utile
- En tant que développeur, souvent dans des contextes d’hébergement partagés ou des serveurs moins rigoureux, pouvoir diagnostiquer vite une erreur fatale est un vrai plus.
- L’option INI diff permet aux devs de voir ce qui a été modifié dans la configuration, utile pour les audits ou pour comprendre pourquoi un système se comporte mal.
En résumé
Voici ce qu’il faut retenir: PHP 8.5 apporte des petites mais puissantes améliorations : lisibilité, maintenance, robustesse. Si vous utilisez Laravel (ou envisagez de l’utiliser), préparer la montée en version pour PHP 8.5 est un bon plan. Pensez à vérifier la compatibilité de vos packages, faire des tests, et profiter de ces nouveautés pour refactoriser. Ce ne sont pas des changements massifs mais ils améliorent réellement l’expérience développeur.