Retour au Blog

PHP 9.0 dévoilé : ce que vous devez savoir avant la sortie

PHP 9.0 dévoilé : ce que vous devez savoir avant la sortie

PHP continue d’évoluer pour répondre aux exigences du développement web moderne. Après les avancées notables de PHP 7 et la 8, la version 9.0 promet un tournant décisif. Plus strict, plus clair, et surtout plus sécurisé, PHP 9.0 impose une rupture avec certaines pratiques historiques du langage. Voici un tour d’horizon des changements majeurs à anticiper. 

Vers plus de rigueur : les opérateurs ++ et - - changent de comportement 

Jusqu’à présent, PHP permettait d’incrémenter des chaînes comme 'a9', ou des valeurs comme null ou false, avec une certaine “magie”. Cela pouvait donner des résultats surprenants, voire problématiques. 

Dès PHP 9.0, ce type d’opération provoquera une erreur de type. PHP ne convertira plus automatiquement ces valeurs en entiers. Les chaînes vides ne seront pus vues comme 0. Pour ceux qui ont réellement besoin d’incrémenter une chaîne, une nouvelle fonction, str_increment(), permettra de le faire de manière explicite. 

Unserialize() sous surveillance : PHP 9.0 renforce la gestion des erreurs

Jusqu’à présent, utiliser la fonction unserialize() en PHP pouvait s’avérer risqué. En cas de problème : données corrompues, format inattendu, ou objet manquant, la fonction de contenter souvent de renvoyer false ou de générer un simple avertissement. Résultat : ces erreurs passaient parfois inaperçues, ce qui compliqué le débogage et pouvait laisser des failles dans l’application. 

Avec PHP 9.0, ce comportement change : une exception dédiée (UnserializationFailedException) sera levée. Cela permettra d’utiliser des blocs try/catch pour gérer correctement les erreurs, comme ceci : 

try {

    $data = unserialize($input);

} catch (UnserializationFailedException $e) {

    // Gestion propre de l’erreur

    echo "Erreur lors de l’unserialization : " . $e->getMessage();

}

Cette évolution renforce la fiabilité de vos applications PHP, surtout les contextes où vous devez désérialiser des données provenant d’une source externe (cookies, sessions, fichiers, etc.). En traitant l’erreur comme une vraie exception, PHP pour les développeurs à coder de façon plus sécurisée et explicite. 

PHP 9.0
PHP 9.0

PHP 9.0 dit stop aux tableaux créés depuis false

Parmi les petites bizarreries que PHP tolérait jusqu’à présent, l'une des plus déroutantes était la possibilité d’ajouter un élément à une variable contenant false, ce qui avait pour effet de la transformer implicitement… en tableau Une ligne comme celle-ci : 

$items = false;

$items[] = 'nouvel élément';

fonctionnait sans broncher dans les versions précédentes de PHP. Résultat : la variable $items, initialement booléenne,devenait subitement un tableau contenant un élément. Si cela pouvait sembler pratique sur le moment, ce genre de comportement implicite est souvent source de bugs subtils et d’incompréhensions dans le code. 

Avec PHP 9.0, cette pratique est désormais interdite. Tenter d’écrire dans une variable false avec la syntaxe tableau (false[] = ...) déclenchera une erreur de type, vous obligeant à initialiser explicitement votre tableau avant de l’utiliser : 

$items = []; // Initialisation explicite

$items[] = 'nouvel élément';

Ce changement va dans le sens d’un code plus lisible. Il vous évite de baser votre logique sur des comportements implicites du langage, au profit d’une écriture plus claire et plus robuste. 

Moins d’ambiguïté dans vos chaînes : PHP 9.0 simplifie l’interpolation

L’interpolation de variables dans des chaînes de caractères est l’une des fonctionnalités les plus pratiques de PHP. Vous pouvez écrire : 

echo "Bonjour $nom";

et PHP insérera automatiquement la valeur de $nom dans la chaîne. Mais PHP autorisait aussi des syntaxes plus complexes, comme : 

echo "Bonjour ${nom}";

echo "Le résultat est : ${calcul()}";

PHP 9.0 est en cours de planification et promet des changements significatifs visant à améliorer la prévisibilité, la sécurité et la clarté du langage. Bien qu’aucune date de sortie officielle n’ait été annoncée, plusieurs évolutions majeures sont déjà envisagées. 

echo "Bonjour ${nom}";

echo "Le résultat est : ${calcul()}";

Ces formes étaient utiles dans certains cas, mais elles introduisaient aussi de l’ambiguïté, et pouvaient prêter à confusion, surtout pour les nouveaux développeurs. Pire encore, elles pouvaient parfois produire des comportements inattendus, notamment avec des expressions ou des fonctions intégrées directement dans des chaînes. 

Avec PHP 9.0, fini la complexité inutile : seules les interpolations simples seront autorisées. Cela signifie que vous devrez désormais écrire : 

echo "Bonjour {$nom}";

ou bien sortir complètement du contexte de la chaîne pour faire des opérations plus avancées : 

echo "Le résultat est : " . calcul();

Un petit changement syntaxique, mais une vraie amélioration en lisibilité et cohérence. 

Des avertissements transformés en erreurs fatales : PHP 9.0 d’assure de votre attention 

L’une des critiques récurrentes envers PHP était que de nombreuses erreurs, particulièrement les avertissements, étaient souvent ignorées ou négligées. Par exemple, un avertissement concernant l’utilisation d’une variable non définie ou d’un indice de tableau manquant pouvait être ignoré sans réellement casser l’exécution du script. Cela pouvait entraîner des comportements imprévisibles et des bugs difficiles à déceler. 

HP 9.0 change en promouvant certains avertissements en erreurs fatales. Cela signifie que certaines erreurs de type avertissement, telles ques l’accès à une propriété ou une méthode sur une variable null, ou l'utilisation d'un indice inexistant dans un tableau — provoqueront désormais l'arrêt immédiat du script, empêchant ainsi des comportements indésirables.

Exemple avec un avertissement habituel en PHP 8.x : 

$personne = null;

echo $personne->nom; // Un avertissement est généré, mais l'exécution continue

Dans PHP 9.0, ce code génère une erreur fatale, stoppant l’exécution dès qu’un tel cas est rencontré. Cela vous oblige à corriger l’erreur avant de pouvoir continuer, ce qui réduit les risques de comportements imprévisibles dans vos applications. 

Des fonctions plus claires : PHP 9.0 revoit les signatures pour plus de lisibilité

Depuis ses débuts, PHP a été un langage très flexible, parfois trop. Certaines fonctions comme array_keys() changent de comportement selon les arguments fournis ce qui peut rendre le code difficile à lire ou à maintenir. 

Avec PHP 9.0, ce flou va disparaître : plusieurs fonctions seront scindées en versions plus explicites, chacune dédiée à un usage clair. Par exemple, array_keys_filter() pourrait venir compléter array_keys() pour gérer les cas de filtrage. Un vrai gain en lisibilité et en précision.

Grand ménage de printemps : PHP 9.0 supprime les fonctionnalités obsolètes 

PHP 9.0 va supprimer définitivement les éléments marqués comme obsolètes dans les versions précédentes (8.1 à 8.4), comme l’interface Serializable, remplacée par __serialize() et __unserialize().

Parmi les suppressions les plus notables, on retrouve l’interface Serializable, utilisée historiquement pour personnaliser la stérilisation d’objets. Cette interface, jugée peu intuitive et sujette à erreurs, est remplacée par les méthodes magiques modernes __serialize() et __unserialize(), bien plus explicites et sécurisées. 

Autres exemples de suppressions prévues : 

  • Des fonctions peu utilisées ou redondantes,
  • Des extensions obsolètes ou non maintenues, 
  • Des comportements implicite jugés dangereux ou confus.

Il est fortement recommandé d’activer les erreurs de dépréciations (E_DEPRECATED) dès maintenant pour adapter votre code en amont.

PHP 9.0 : Schéma  
PHP 9.0 : Schéma  

Performances, asynchrone, multithreading : PHP 9.0 prépare l’avenir

Le moteur JIT sera encore optimisé pour de meilleures performances, notamment sur les traitements lourds. 

Mais surtout, PHP 9.0 pourrait renforcer le support de la concurrence asynchrone, grâce à une meilleure intégration des fibers. Même si le multithreading n’est pas encore officiel, ces évolutions vont dans le sens d’un langage plus adapté aux applications modernes : APIs en parallèle, websockets, évènements en temps réel…

Pourquoi c’est important ? 

Ces évolutions permettraient à PHP de rester pertinent dan des cas d’usage plus complexes : 

  • APIs hautement concurrentes,
  • Applications en temps réel (chat, streaming, websockets),
  • Traitement massif de données ou d’évènements. 

PHP 9.0 ne se contente pas de faire le ménage : il prépare activement l’avenir. Cette version introduit des changements profonds, parfois contraignants à court terme, mais bénéfiques pour la qualité, la sécurité et la maintenabilité du code. 

Anticipez ces évolutions, testez vos projets sur les versions bêta, et profitez de cette transition pour adopter des pratiques plus modernes. PHP continue de grandir et il est temps que votre code en fasse autant.

Contactez-nous !
Je veux en savoir plus !