Où en est le support de PHP 7.4 et 8.0 ?
| Critère | PHP 7.4 | PHP 8.0 |
|---|---|---|
| Sortie | novembre 2019 | novembre 2020 |
| Fin des correctifs de bugs | novembre 2021 | novembre 2022 |
| Fin des correctifs de sécurité | novembre 2022 | novembre 2023 |
Statuts vérifiés le 08/11/2026 sur les pages officielles de version.
Les ruptures à traiter en premier
- Bloquant · 8.0Comparaison lâche nombre/chaîne non numérique : on compare désormais en chaîne, donc 0 == 'foo' vaut false. Fait sauter beaucoup de conditions legacy.source
- Bloquant · 8.0L'opérateur @ ne masque plus les erreurs fatales ; error_reporting par défaut passe à E_ALL et display_startup_errors est activé.source
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, mesurer la dette avec un Bear Scan chiffre la dette qui ralentira chaque étape.
Passer à PHP 8.0
- BloquantComparaison lâche nombre/chaîne non numérique : on compare désormais en chaîne, donc 0 == 'foo' vaut false. Fait sauter beaucoup de conditions legacy.source
- BloquantL'opérateur @ ne masque plus les erreurs fatales ; error_reporting par défaut passe à E_ALL et display_startup_errors est activé.source
- BloquantRetraits : create_function(), each(), __autoload(), casts (real) et (unset), constructeurs PHP 4, constantes insensibles à la casse, appel statique de méthodes non statiques.source
- BloquantNombreux avertissements promus en exceptions Error/TypeError (écriture sur propriété d'un non-objet, clé de tableau invalide, opérations sur types incompatibles).source
- À traiterLes erreurs d'héritage liées aux signatures incompatibles (violations de LSP) sont toujours fatales ; l'assertion lève une exception par défaut (assert.exception=1).source
Extensions
- Plusieurs ressources deviennent des objets (curl_init() renvoie un CurlHandle, etc.) : remplacer les tests is_resource() par des tests contre false.source
- Mot réservé match ; paramètre optionnel avant un paramètre obligatoire déprécié (la valeur par défaut est ignorée).source
Pièges rencontrés en migration
- Les gestionnaires d'erreurs qui testaient error_reporting() == 0 pour détecter un @ doivent utiliser un masque (error_reporting() & $err_no), sinon les erreurs masquées remontent.source
- Avec display_startup_errors activé par défaut et E_ALL, il faut vérifier display_errors=Off en production pour éviter les fuites d'informations.source
Rector : LevelSetList::UP_TO_PHP_80
Ce que PHP 8.0 vous apporte
- 8.0 : Arguments nommés, attributs natifs (#[...]) et promotion des propriétés dans le constructeur.source
- 8.0 : Types union (int|string) et type de retour static ; mixed devient un type réservé.source
- 8.0 : Expression match (comparaison stricte, sans fall-through) et opérateur nullsafe ?->.source
- 8.0 : Classe WeakMap, ValueError, $object::class et throw utilisable comme expression.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 à apprendre à piloter Claude Code sur votre code. Exemple concret : la migration Symfony d’un e-commerce bordelais, et après la migration, la maintenance des versions garde le socle à jour.
Sur une base aussi ancienne, l’audit d’abord : Bear Scan mesure tests, dépendances abandonnées et code mort avant de fixer le prix de la migration.
Questions fréquentes
À traiter en premier : Comparaison lâche nombre/chaîne non numérique : on compare désormais en chaîne, donc 0 == 'foo' vaut false. Fait sauter beaucoup de conditions legacy (PHP 8.0) ; L'opérateur @ ne masque plus les erreurs fatales ; error_reporting par défaut passe à E_ALL et display_startup_errors est activé (PHP 8.0).
PHP 7.4 ne reçoit plus de correctifs de sécurité depuis novembre 2022.
En grande partie : le set LevelSetList::UP_TO_PHP_80 applique en une passe les transformations mécaniques jusqu’à PHP 8.0. 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.