Où en est le support de PHP 8.3 et 8.4 ?
| Critère | PHP 8.3 | PHP 8.4 |
|---|---|---|
| Sortie | novembre 2023 | novembre 2024 |
| Fin des correctifs de bugs | décembre 2025 | décembre 2026 |
| Fin des correctifs de sécurité | décembre 2027 | décembre 2028 |
Statuts vérifiés le 08/11/2026 sur les pages officielles de version.
Les ruptures à traiter en premier
Le chemin de migration, étape par étape
Chaque version mineure de PHP a son guide de migration officiel ; on les applique dans l’ordre, avec la CI au vert entre deux étapes. Avant de lancer le chantier, auditer la dette technique avec Bear Scan chiffre la dette qui ralentira chaque étape.
Passer à PHP 8.4
- BloquantParamètre implicitement nullable (Type $p = null) déprécié : écrire ?Type ou Type|null. Touche massivement le code hérité et les dépendances.source
- À traiterexit() et die() se comportent comme des fonctions : soumis à strict_types et lèvent TypeError pour un type invalide.source
- À traiterLe niveau E_STRICT est supprimé et sa constante déclarée dépréciée ; trigger_error() avec E_USER_ERROR est déprécié.source
- À traiterModification indirecte de propriétés readonly dans __clone() interdite ; la récursion pendant une comparaison lève une Error.source
- Mineurround() lève ValueError pour un mode invalide, str_getcsv() exige des séparateurs d'un octet, et nommer une classe _ est déprécié.source
Extensions
- Migration ressource vers objet pour DBA, ODBC et SOAP.source
- opcache.interned_strings_buffer : maximum relevé à 32767 sur 64 bits (4095 avant) ; nouveaux avertissements ou exceptions dans curl, gd, intl, mbstring, session, xml.source
Pièges rencontrés en migration
- Les dépréciations de types implicitement nullables viennent surtout des dépendances : mettre à jour les paquets de vendor/ (composer outdated) avant de basculer la production.source
- Une API qui passait n'importe quel type à exit() (ex. un tableau ou un objet) échoue désormais en TypeError dans les scripts et commandes console.source
Rector : LevelSetList::UP_TO_PHP_84
Guide officiel de migration vers PHP 8.4
À lire sur le blog : Doctrine ORM 3.4.0 : Lazy Objects natifs PHP 8.4 en production · Docker PHP 8.4 production : multi-stage, non-root et scan Trivy en CI
Ce que PHP 8.4 vous apporte
- 8.4 : Property hooks : logique get/set attachée aux propriétés, avec propriétés virtuelles sans valeur de support.source
- 8.4 : Visibilité asymétrique des propriétés : la visibilité en écriture se règle séparément de la lecture.source
- 8.4 : Objets lazy dont l'initialisation est différée jusqu'au premier accès, utile aux frameworks et à l'injection de dépendances.source
- 8.4 : Attribut #[\Deprecated] pour marquer fonctions, méthodes et constantes de classe (erreur E_USER_DEPRECATED).source
- 8.4 : Chaînage direct d'une expression new sans parenthèses : new Foo()->bar().source
Combien coûte cette migration ?
À partir de 1 500 € HT
Pour la migration accompagnée Bear Upgrade, Rector tourne d’abord en dry-run sur les transformations mécaniques, Claude Code traite les cas que Rector ne couvre pas, puis un développeur senior relit chaque Merge Request. Votre équipe veut reprendre la main ensuite ? Pensez à former votre équipe à Claude Code. Exemple concret : la migration Symfony d’un e-commerce bordelais, et après la migration, la maintenance des versions garde le socle à jour.
Questions fréquentes
À traiter en premier : Paramètre implicitement nullable (Type $p = null) déprécié : écrire ?Type ou Type|null. Touche massivement le code hérité et les dépendances (PHP 8.4) ; exit() et die() se comportent comme des fonctions : soumis à strict_types et lèvent TypeError pour un type invalide (PHP 8.4).
PHP 8.3 reste couvert par les correctifs de sécurité jusqu’en décembre 2027.
En grande partie : le set LevelSetList::UP_TO_PHP_84 applique en une passe les transformations mécaniques jusqu’à PHP 8.4. Restent les changements de comportement (valeurs de retour, erreurs devenues fatales, extensions retirées), à couvrir par les tests et une relecture humaine.
Une migration Bear Upgrade démarre à 1 500 € HT ; le prix ferme est fixé au cadrage, après lecture du code et des dépendances.
Pour aller plus loin
- Migration PHP 8.1 vers 8.3 : les incompatibilités que personne ne mentionne
- Doctrine ORM 3.4.0 : Lazy Objects natifs PHP 8.4 en production
- Docker PHP 8.4 production : multi-stage, non-root et scan Trivy en CI
- PHP 8.4 PDO subclasses : connexions Doctrine typées sans patch tiers
- PHP 8.3 → 8.4 : corriger les nullable implicites sans casser la CI