PHP 8.2 : une sortie discrète qui change beaucoup de choses

Le 8 décembre 2022, la communauté PHP sort la version 8.2. Pas de conférence de presse, pas de campagne marketing — c'est le propre d'un écosystème mature. Et pourtant, cette version apporte des changements fondamentaux qui ont modifié notre façon d'écrire du code chez ADRD. Rappelons le contexte : PHP alimente 77,4% des sites web dont le langage serveur est connu (W3Techs, janvier 2024). WordPress, qui tourne sur 43% du web total, est en train de migrer progressivement. Drupal 10.2 impose PHP 8.1 minimum. Symfony 7 requiert PHP 8.2.

PHP n'est pas en train de mourir — il est en train de mûrir. Et cette maturité apporte des fonctionnalités qu'on attendait depuis longtemps.

Les 5 nouveautés qui ont changé notre code au quotidien

1. Les classes readonly (la fin des setters inutiles)

Avant PHP 8.2, créer un objet immuable nécessitait de déclarer chaque propriété en readonly individuellement. PHP 8.2 introduit les readonly class — toutes les propriétés sont immuables par défaut :

readonly class DemandeRecrutement {
    public function __construct(
        public string $poste,
        public int    $clientId,
        public string $statut = 'ouvert'
    ) {}
}

Dans RecruteX, tous nos objets de transfert de données (DTO) utilisent désormais ce pattern. Zéro setter, zéro risque de mutation accidentelle, code plus lisible.

2. Les types DNF (Disjunctive Normal Form)

PHP 8.2 permet de combiner types union et types intersection : (A&B)|null. C'est particulièrement utile pour les interfaces et les systèmes de plugin où un paramètre peut être soit une implémentation concrète d'une interface, soit null :

function traiterNotification((Notifiable&Loggable)|null $objet): void {
    // PHP garantit que $objet implémente les deux interfaces, ou est null
}

3. mysqli_execute_query() et amélioration des erreurs

Les messages d'erreur PHP 8.2 sont significativement plus précis. Là où PHP 7.4 renvoyait un message cryptique, PHP 8.2 indique le fichier, la ligne, le contexte et souvent la solution. En développement, cela réduit le temps de debug d'environ 30%.

4. Dépréciation des propriétés dynamiques

PHP 8.2 déprécie la création de propriétés dynamiques sur des classes non marquées #[AllowDynamicProperties]. En PHP 9, ce sera une erreur fatale. C'est une rupture pour les anciens codes — et un nettoyage nécessaire. Lors de notre migration, nous avons trouvé 23 endroits dans notre codebase où des propriétés étaient créées dynamiquement "par accident". Tous corrigés.

5. L'enum amélioré et les constantes dans les interfaces

Les enums introduits en PHP 8.1 deviennent plus expressifs en 8.2, notamment leur utilisation dans les expressions match. Dans RecruteX, les statuts de candidature (SOUMIS, EN_COURS, RETENU, REJETE) sont désormais des enums typés — plus de risque de typo dans une string.

Retour d'expérience : migration de 12 projets en 3 mois

Entre janvier et mars 2023, nous avons migré 12 projets PHP de la version 7.4/8.0 vers PHP 8.2. Voici ce qu'on a appris :

Ce qui a bien marché

Les pièges rencontrés

PHP en 2024 : ce qui arrive avec PHP 8.3

PHP 8.3, sorti le 23 novembre 2023, apporte notamment les propriétés de classe readonly amendables (résout un cas limite frustrant de PHP 8.2), json_validate() natif (plus besoin de parser pour valider), et des améliorations sur les types de retour des fonctions built-in. Nous sommes en cours de migration sur les projets les plus actifs.

PHP reste un langage en bonne santé, activement maintenu, avec une communauté large et des performances qui s'améliorent release après release. Si votre application tourne encore sur PHP 7.x, la fin de support de PHP 7.4 était le 28 novembre 2022 — vous êtes potentiellement exposé à des vulnérabilités non patchées. Contactez-nous pour un audit de version →