Aller au contenu principal

Migration PHP · 7.4 → 8.0

Migrer de PHP 7.4 à PHP 8.0

PHP 7.4 ne reçoit plus de correctifs de sécurité depuis novembre 2022 ; PHP 8.0 ne reçoit plus de correctifs de sécurité depuis novembre 2023. Une seule version à franchir, documentée par le guide de migration 8.0 du manuel PHP. 4 ruptures à fort impact sur le parcours. Première rupture à traiter : 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.

Où en est le support de PHP 7.4 et 8.0 ?

Support de PHP 7.4 et 8.0
CritèrePHP 7.4PHP 8.0
Sortienovembre 2019novembre 2020
Fin des correctifs de bugsnovembre 2021novembre 2022
Fin des correctifs de sécuriténovembre 2022novembre 2023

Statuts vérifiés le 08/11/2026 sur les pages officielles de version.

Les ruptures à traiter en premier

  1. 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
  2. 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

Guide officiel de migration vers PHP 8.0

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

Pour aller plus loin

Sources

Votre migration PHP 7.4 → 8.0, livrée en Merge Requests

CI au vert garantie 7 jours après le merge. Un appel de cadrage suffit pour fixer le périmètre, le prix et le délai.