Après un essai au mois de juin 2020, la dernière version du langage de script PHP8.0 est sortie en novembre 2020. Ce langage compte parmi les plus faciles à appréhender et à mettre en œuvre. Avec PHP7, sa vitesse a été bien optimisée et son utilisation améliore le ranking. À l’issue de cette mise à jour récente, découvrez les nouvelles fonctionnalités proposées.
Est-ce que l’ancien code est compatible avec PHP8 ?
L’incompatibilité de l’ancien code avec la nouvelle version PHP8 doit être une évidence : cependant, la plupart des modifications qui risquent d’occasionner des compilations étaient déjà désuètes dans les mises à jour 7.2, 7.3 et 7.4.
Voici les dernières modifications effectuées que nous pouvons citer : Magic quotes legacy, the real type, Reflection export() methods, FILTER_SANITIZE_MAGIC_QUOTES filter, Implode() parameter order mix, array_key_exists() with objects, mb_strrpos() with encoding as 3rd argument, Unbinding $this from non-static closures, hebrevc() function, convert_cyr_string() function, money_format() function, ezmlm_hash() function, allow_url_include ini directive et restore_include_path() function.
Si votre code a été régulièrement mis à jour, vous ne devriez pas rencontrer de problème malgré le fait que les modifications rétroactives ne soient pas compatibles.
PHP8.0, quelles sont les nouvelles fonctionnalités ?
Avec cette nouvelle version de PHP, les développeurs web profitent de fonctionnalités qui multiplient le nombre de possibilités. Découvrez les principales améliorations constatées :
Une amélioration des performances grâce au compilateur JIT
Le compilateur JIT est sans doute l’innovation la plus intéressante de PHP8. Si PHP est un langage non compilé, mais interprété ligne par ligne, avec le compilateur JIT (just in time), le code est partiellement compilé pendant l’exécution. Ce système fonctionne un peu comme une version en cache du code. D’après les résultats obtenus à l’issue des tests effectués, une amélioration des performances de plus de 45 % est constatée avec le compilateur JT.
Type Union pour l’union de deux ou de plusieurs types
Les Types Union sont des fonctionnalités qui sont déjà utilisées dans d’autres langages comme TypeScript, C/C++ et Haskell. Avec PHP8, ils permettent de former une union avec deux ou plusieurs types. Tous les types identifiés peuvent être utilisés sauf void, parce qu’il ne donne pas de valeur de retour. Par ailleurs, il est possible de déclarer les unions nulles grâce aux mentions « |null ou ? ».
Static return type pour compléter self & parent
Le terme « static » design une classe spéciale : dans cette nouvelle version, il s’agit d’un autre type Return valide qui complète « self & parent ».
WeakMap, une extension de WeakRefs
Si WeakRefs a été ajouté à la version PHP 7.4, cette fonction se développe avec WeakMaps de PHP 8. Ces fonctionnalités permettent de supprimer les objets lorsqu’il n’y a que le cache qui se réfère aux classes d’entités des objets. Elles assurent également des économies de ressources pendant la manipulation des objets.
::class appliqué aux objets, pour réduire la taille du code source
Lorsque vous souhaitiez attribuer une classe aux objets dans les anciennes versions, vous deviez utiliser get_class(). Désormais, vous avez ::class appliqué pour réduire la taille du code source.
Stringable interface, passez de l’ajout manuel à l’ajout automatique
La Stringable interface s’ajoute automatiquement aux classes qui ajuste la méthode _toString(). Il faut noter qu’avant la sortie de la version PHP8, cette étape s’effectuait toujours manuellement.
La fonction fdiv() qui autorise la division par 0
Avec la division par 0, la fonction fdiv() permet d’obtenir une valeur de retour INF, -INF ou encore NAN.
Type annotations et type errors
Avec cette nouvelle version, vous avez des annotations de types correctes avec toutes les fonctions et les méthodes internes. Si les TypeErrors ne se déclenchaient qu’avec les fonctions que l’utilisateur définit, à présent, la plupart des fonctions internes renvoient des TypeErrors avec PHP8.
engine-warnings : une nouvelle classification
Grâce à cette mise à jour, de nouveaux messages d’erreur PHP plus précis vont apparaitre à la place des warnings et des notes.
Un nouveau paramètre display_errors=Off pour les fatals errors
Vous n’utiliserez plus @ pour supprimer les erreurs. Il suffit de paramétrer le serveur display_errors=Off.
Écriture des méthodes magiques avec des signatures correctes et modification des signatures Reflection
L’écriture des méthodes magiques était toujours possible même lorsque les signatures n’étaient pas conformes à la signature souhaitée. La version PHP 8 est doté de plusieurs contrôles de paramètres et de valeurs de retour pour que les signatures soient toujours exactes. Les signatures Reflection ont également été modifiées.