La version 8.5 de PHP est officiellement disponible depuis le 20 novembre 2025. Cette mise à jour majeure apporte des fonctionnalités très attendues : le pipe operator pour chaîner les fonctions élégamment, une extension URI native pour gérer les URLs proprement, et le clone with qui simplifie la manipulation des objets readonly. Sans oublier de nouvelles fonctions pratiques et quelques dépréciations à anticiper.
Le pipe operator : enfin du chaînage lisible
Le pipe operator |> permet de chaîner des appels de fonctions de gauche à droite, en passant le résultat de chaque fonction à la suivante. Fini les variables temporaires et les appels imbriqués difficiles à lire.
Avant PHP 8.5 : imbrications et variables temporaires
$title = ' PHP 8.5 Released ';
// Approche avec variables temporaires (verbeuse)
$step1 = trim($title);
$step2 = str_replace(' ', '-', $step1);
$step3 = str_replace('.', '', $step2);
$slug = strtolower($step3);
// Ou approche imbriquée (illisible)
$slug = strtolower(
str_replace('.', '',
str_replace(' ', '-',
trim($title)
)
)
);
Avec PHP 8.5 : clarté et fluidité
$title = ' PHP 8.5 Released ';
// Chaînage lisible de gauche à droite
$slug = $title
|> trim(...)
|> fn($str) => str_replace(' ', '-', $str)
|> fn($str) => str_replace('.', '', $str)
|> strtolower(...);
// Résultat : "php-85-released"
Le pipe passe automatiquement le résultat comme premier paramètre de la fonction suivante. Vous pouvez utiliser la syntaxe ... pour les fonctions natives ou des closures pour plus de contrôle.
Clone with : simplifier les objets readonly
Les classes readonly sont pratiques pour l’immutabilité, mais modifier une propriété nécessitait du code verbeux. PHP 8.5 introduit clone() avec un second paramètre pour mettre à jour des propriétés pendant le clonage.
L’ancienne méthode (PHP 8.4)
readonly class Color
{
public function __construct(
public int $red,
public int $green,
public int $blue,
public int $alpha = 255,
) {}
public function withAlpha(int $alpha): self
{
// Récupération manuelle des propriétés
$values = get_object_vars($this);
$values['alpha'] = $alpha;
return new self(...$values);
}
}
La nouvelle syntaxe clone with (PHP 8.5)
readonly class Color
{
public function __construct(
public int $red,
public int $green,
public int $blue,
public int $alpha = 255,
) {}
public function withAlpha(int $alpha): self
{
// Clone avec modification en une ligne
return clone($this, ['alpha' => $alpha]);
}
}
$blue = new Color(79, 91, 147);
$transparentBlue = $blue->withAlpha(128);
Cette syntaxe rend le pattern « wither » beaucoup plus concis et expressif.
Extension URI native : parsing sécurisé et standard
PHP 8.5 intègre une extension URI complète qui respecte les standards RFC 3986 et WHATWG URL. Elle remplace avantageusement parse_url() avec une API orientée objet et plus robuste.
use Uri\Rfc3986\Uri;
// Parsing d'une URI complète
$uri = new Uri('https://laravel-actu.fr/articles/php-85?utm_source=newsletter');
echo $uri->getHost(); // "laravel-actu.fr"
echo $uri->getPath(); // "/articles/php-85"
echo $uri->getQuery(); // "utm_source=newsletter"
echo $uri->getScheme(); // "https"
// Modification sécurisée
$newUri = $uri->withHost('php.net')->withPath('/releases/8.5');
echo $newUri->toString(); // "https://php.net/releases/8.5?utm_source=newsletter"
L’extension utilise les bibliothèques uriparser et Lexbor pour garantir conformité et sécurité.
Nouvelles fonctions pratiques
array_first() et array_last()
Deux fonctions qui simplifient l’accès aux extrémités d’un tableau.
$events = ['login', 'page_view', 'purchase', 'logout'];
// Avant PHP 8.5
$lastEvent = $events === [] ? null : $events[array_key_last($events)];
// PHP 8.5
$firstEvent = array_first($events); // "login"
$lastEvent = array_last($events); // "logout"
// Retourne null si le tableau est vide (pratique avec ??)
$result = array_last([]) ?? 'aucun événement';
get_error_handler() et get_exception_handler()
Récupérez les gestionnaires d’erreurs et d’exceptions actuellement actifs :
// Définir un handler personnalisé
set_exception_handler(function(Throwable $e) {
log_error($e->getMessage());
});
// Récupérer le handler actif (nouveau en 8.5)
$handler = get_exception_handler();
var_dump($handler); // Closure définie ci-dessus
// Idem pour les erreurs
$errorHandler = get_error_handler();
L’attribut #[\NoDiscard] pour la sécurité
Marquez une fonction avec #[\NoDiscard] pour forcer l’utilisation de sa valeur de retour. PHP émettra un warning si le résultat est ignoré.
#[\NoDiscard]
function getAuthToken(): string
{
return bin2hex(random_bytes(32));
}
// Oubli d'utiliser le résultat
getAuthToken();
// Warning: The return value of function getAuthToken() should
// either be used or intentionally ignored by casting it as (void)
// Usage correct
$token = getAuthToken();
// Ou ignorer volontairement
(void) getAuthToken();
Parfait pour les API où oublier le retour serait une erreur (tokens, configurations, etc.).
Autres améliorations notables
- Closures dans les constantes : utilisez des closures statiques et des callables first-class dans les attributs et paramètres par défaut
- Persistent cURL Share Handles :
curl_share_init_persistent()réutilise les connexions entre requêtes PHP - Fatal errors avec backtrace : les erreurs fatales incluent désormais une trace complète
- Asymmetric visibility pour propriétés statiques : contrôle fin de la visibilité en lecture/écriture
- #[Override] sur les propriétés : vérifiez qu’une propriété overwrite bien celle du parent
Dépréciations et breaking changes
PHP 8.5 nettoie certaines fonctionnalités obsolètes :
- Backticks dépréciés : utilisez
shell_exec()explicitement au lieu de`command` - Cast non-canoniques :
(boolean),(integer),(double)sont dépréciés. Utilisez(bool),(int),(float) nullcomme clé de tableau : utilisernullavecarray_key_exists()ou comme offset est déprécié- Semicolon après case : terminer un
casepar;au lieu de:est déprécié __sleep()et__wakeup(): soft-deprecated au profit de__serialize()et__unserialize()disable_classesINI supprimé : cette directive causait des problèmes dans le moteur
La migration depuis PHP 8.4 devrait être fluide pour la plupart des applications.
Conclusion
PHP 8.5 apporte des outils qui améliorent concrètement la lisibilité et la maintenabilité du code : le pipe operator rend les transformations de données élégantes, clone with simplifie les objets immutables, et l’extension URI standardise enfin le parsing d’URLs. Les nouvelles fonctions array_first() et array_last() éliminent du boilerplate inutile.
Ces ajouts s’inscrivent dans la continuité de l’amélioration constante de PHP vers un langage plus expressif et type-safe. La roadmap vers PHP 9 (prévu pour 2026) se dessine avec les dépréciations introduites dans cette version.
Ressources
À propos de Laravel Actu
Développeur passionné par Laravel et son écosystème.
Voir tous les articles