Le PHP est l’un des langages de pro­gram­ma­tion les plus faciles à apprendre. Avec un bon tutoriel PHP et la bonne mo­ti­va­tion, vous pouvez écrire vos premiers scripts en quelques heures et exécuter des commandes. PHP 7 a déjà permis d’optimiser sa vitesse, ce qui a conduit à un meilleur ranking. Le langage open source a fait l’objet d’une nouvelle mise à jour majeure avec la version 8.0. Suivie un an plus tard d’une mise à jour mineure avec la version 8.1.

Quelles sont les fonc­tion­na­li­tés de PHP 8.1 ?

PHP 8.1 a été publié en version bêta et est en cours de test. La mise à jour finale ne suivra pas avant novembre 2021, mais les nouvelles fonc­tion­na­li­tés sont déjà connues. Vous pouvez donc vous attendre aux nouvelles fonctions suivantes :

  • Enum : les énu­mé­ra­tions (énu­mé­ra­tions avec un certain nombre de valeurs) sont main­te­nant dis­po­nibles comme type de variable.
  • Fibers : le nouveau type de bloc de code Fibers vous donne la pos­si­bi­lité d’exécuter plusieurs threads en parallèle.
  • Arrays : depuis PHP 7.4, vous pouvez déballer les tableaux avec des clés nu­mé­riques. Cela est également possible pour les tableaux à clé contenant des chaînes de ca­rac­tères.
  • Readonly : désormais, les pro­prié­tés des classes peuvent être marquées comme 'rea­don­ly' et ne sont donc plus mo­di­fiables.
  • In­ter­sec­tion : les types d’in­ter­sec­tion (si­mi­laires aux types d’union) sont main­te­nant dis­po­nibles.
  • Never : le nouvel indice de type de retour 'never' indique qu’une fonction est terminée et ne renvoie pas d’autre valeur.
  • Final : vous pouvez désormais marquer les cons­tantes de classe avec 'final' afin qu’elles ne puissent pas être modifiées par les sous-classes.
  • Fsync : PHP 8.1 introduit les deux fonctions 'fsync' et 'f­da­ta­sync' pour syn­chro­ni­ser les données du tampon vers le support de stockage.
  • Octal : afin d’afficher le système numérique octal, il sera possible à l’avenir d’utiliser le préfixe '0o' (zéro et petit O) en plus de '0' (zéro).
  • Globals : l’uti­li­sa­tion de '$GLOBALS' a été lé­gè­re­ment res­treinte et conduit main­te­nant à un message d’erreur dans certains cas.
  • Null : les fonctions internes n’ac­cep­te­ront plus les valeurs nulles pour les arguments non nulles.
Note

Ceci n’est qu’une sélection des chan­ge­ments les plus in­té­res­sants de PHP 8.1. De nom­breuses autres in­no­va­tions prévues peuvent être trouvées dans le wiki officiel avec toutes les Request for Comments.

PHP 8 : sortie en novembre 2020

Le 26 novembre 2020 dernier était publiée la dernière version du langage de script populaire, PHP 8.0.0. Cela cor­res­pond au cycle normal de trois ans de PHP. Son pré­dé­ces­seur PHP 7.4 avait été publié un an au­pa­ra­vant, juste après que le support pour PHP 7.1 ait été in­ter­rompu. Le soutien au PSP 7.2 s’est également terminé fin 2020.

Essayez PHP 8 dès main­te­nant !

Essayez PHP 8 dès main­te­nant ! Vous n’êtes pas encore client IONOS ? Optez pour l’une de nos offres éco­no­miques d’hé­ber­ge­ment Web. Dans votre espace client IONOS, vous pouvez modifier la version actuelle de PHP, et opter pour la version de PHP 8 ou PHP 8.1 (dès que dis­po­nible).

Existe-t-il des com­pli­ca­tions avec l’ancien code ?

Comme PHP 8 est une nouvelle version majeure, il faut s’attendre à ce que l’ancien code ne soit plus com­pa­tible. Toutefois, la plupart des mo­di­fi­ca­tions sus­cep­tibles d’entraîner des com­pli­ca­tions étaient déjà obsolètes dans les versions 7.2, 7.3 et 7.4.

Parmi les dernières mo­di­fi­ca­tions, citons :

  • The real type
  • Magic quotes legacy
  • array_key_exists() with objects
  • FILTER_SANITIZE_MAGIC_QUOTES filter
  • Re­flec­tion export() methods
  • mb_strrpos() with encoding as 3rd argument
  • implode() parameter order mix
  • Unbinding $this from non-static closures
  • hebrevc() function
  • convert_cyr_string() function
  • money_format() function
  • ezmlm_hash() function
  • restore_include_path() function
  • allow_url_include ini directive

Si vous avez toujours maintenu votre code à jour, vous n’aurez pra­ti­que­ment aucun problème, même si les chan­ge­ments ré­troac­tifs sont in­com­pa­tibles. Une liste complète des chan­ge­ments de cette Major Release est dis­po­nible dans la page de projet PHP.

Note

Microsoft a annoncé qu’il ne proposera plus de support Windows pour PHP 8 et les versions ul­té­rieures. Cependant, les dé­ve­lop­peurs de PHP ont déjà annoncé leur intention de combler eux-mêmes cette lacune.

Les nouvelles fonc­tion­na­li­tés de PHP 8

La nouvelle version de PHP est dotée de nouvelles fonc­tion­na­li­tés qui offriront aux dé­ve­lop­peurs Web de nom­breuses pos­si­bi­li­tés sup­plé­men­taires. Voici un résumé des prin­ci­pales amé­lio­ra­tions apportées par rapport aux versions pré­cé­dentes.

Note

Le 30 novembre 2020, la version PHP 7.2 atteindra sa date of­fi­cielle de fin de vie (EOL pour End-Of-Life) et ne sera plus supportée. Pour en savoir plus à ce sujet, consultez notre article sur ce thème.

Com­pi­la­teur JIT

La plus grande in­no­va­tion est le com­pi­la­teur JIT, qui améliore sen­si­ble­ment les per­for­mances. PHP n’est pas compilé, mais in­ter­prété ligne par ligne. Le com­pi­la­teur JIT (JIT = Just in Time) compile des parties du code pendant l’exécution et agir donc comme une version en cache du code.

Cette nouvelle fonc­tion­na­lité de PHP 8 a déjà été testée de manière assez im­pres­sion­nante par Pedro Escudero. Ce dernier a utilisé un script simple pour comparer les versions 5.3, 7.4 et 8 (avec et sans JIT). Ainsi, il a exécuté le script 100 fois dans chacune des versions et a ensuite calculé le temps moyen né­ces­saire à l’exécution.

Les valeurs moyennes suivantes ont donc été obtenues :

Version Temps en secondes
5.3 0.64574003219604
7.4 0.10253500938416
8 (sans JIT) 0.098223924636841
8 (avec JIT) 0.053637981414795

Si le passage de la version 7.4 à la version 8 sans JIT ne fait pas grande dif­fé­rence, la dif­fé­rence par rapport à la version 8 avec JIT est sig­ni­fi­ca­tive. Le com­pi­la­teur JIT permet une amé­lio­ra­tion des per­for­mances de plus de 45 %.

Type Union

Les types Union ont déjà fait leur ap­pa­ri­tion dans d’autres langages comme C/C++, Ty­peS­cript ou Haskell. Ici, deux types ou plus peuvent former une union et tout type mentionné peut être utilisé. Dans le code en soi, on pourrait par exemple avoir :

public function foo(Foo|Bar $input): int|float;

Cependant, il existe une res­tric­tion, car void ne peut pas faire partie d’un type union, car il ne produit pas de valeur de retour. En outre, les unions nulles peuvent être déclarées avec les mentions |null ou ? , comme dans cet exemple :

public function foo(Foo|null $foo): void;
public function bar(?Bar $bar): void;

Static return type

Static est un nom de classe spécial ; dans la nouvelle version, il devient un type Return valide en plus de self & parent.

WeakMap

WeakRefs a déjà été ajouté à PHP 7.4. PHP 8 livre main­te­nant avec WeakMaps l’extension de cette fonction. WeakMaps et WeakRefs peuvent être utilisés pour supprimer des objets lorsque seul le cache fait référence aux classes d’entités des objets. Cela permet d’éco­no­mi­ser des res­sources lors de la ma­ni­pu­la­tion des objets. Un exemple tiré de la do­cu­men­ta­tion :

class FooBar {
    private WeakMap $cache;
    public function getSomethingWithCaching(object $obj) {
        return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj);
    }
    // ...
}

::class appliqué aux objets

Dans les versions pré­cé­dentes, il fallait utiliser get_class() pour attribuer une classe aux objets. Main­te­nant, vous pouvez appliquer ::class aux objets, ce qui permet de réduire la taille du code source.

Strin­gable interface

La Strin­gable interface est au­to­ma­ti­que­ment ajoutée aux classes qui im­plé­mente la méthode __toString(). Au­pa­ra­vant, cette étape devait être effectuée ma­nuel­le­ment. Dans le code en soi, voilà à quoi cela ressemble :

class Foo
{
    public function __toString(): string
    {
        return ‘foo’;
    }
}
function bar(Stringable $stringable) { /* … */ }
bar(new Foo());
bar(‘abc’);

Fonction fdiv()

Avec la nouvelle fonction fdiv(), une division par 0 est autorisée. Vous obtenez alors INF, -INF ou NAN comme valeur de retour.

Type errors

Au­pa­ra­vant, seules les fonctions définies par l’uti­li­sa­teur dé­clen­chaient les Ty­peEr­rors, les fonctions internes émet­taient un aver­tis­se­ment et null. Avec PHP 8, la majorité des fonctions internes renvoient également des Ty­peEr­rors.

Nouvelle clas­si­fi­ca­tion des engine-warnings

Jusqu’à présent, on notait de nom­breuses erreurs qui n’ap­pa­rais­saient que sous forme de warning ou de note. Une mise à jour a main­te­nant été effectuée. Une liste complète des nouveaux messages d’erreur PHP est dis­po­nible dans la do­cu­men­ta­tion.

Sig­na­tures correctes des méthodes magiques

Dans les versions pré­cé­dentes de PHP, il était possible d’écrire des méthodes magiques avec des sig­na­tures qui ne cor­res­pon­daient pas à la signature attendue, par exemple __clone(): float oder __isset(): Closure. Depuis l’in­tro­duc­tion du PHP 7.0, l’uti­li­sa­tion correcte des méthodes magiques n’a été vérifiée que de manière aléatoire. Divers contrôles de pa­ra­mètres et de valeurs de retour ont été ajoutés à la nouvelle version afin de garantir l’exac­ti­tude des sig­na­tures.

Re­flec­tion

Les sig­na­tures Re­flec­tion ont été modifiées. A l’origine, Re­flec­tion était spécifié comme suit :

ReflectionClass::newInstance($args);
ReflectionFunction::invoke($args);
ReflectionMethod::invoke($object, $args);

Avec PHP 8, ce sera écrit comme suit :

ReflectionClass::newInstance(...$args);
ReflectionFunction::invoke(...$args);
ReflectionMethod::invoke($object, ...$args);

Pour prendre en charge PHP 7 et PHP 8 en même temps, vous pouvez formuler le code de la sorte :

ReflectionClass::newInstance($arg = null, ...$args);
ReflectionFunction::invoke($arg = null, ...$args);
ReflectionMethod::invoke($object, $arg = null, ...$args);
Conseil

Vous n’avez pas encore de site Web propre ? L’hé­ber­ge­ment dédié de IONOS est puissant et convient également aux débutants. Avec les serveurs virtuels de IONOS, vous pouvez également compter sur un niveau de flexi­bi­lité par­ti­cu­liè­re­ment élevé et sur les meil­leures per­for­mances. Choi­sis­sez l’offre qui convient le mieux à votre projet.

Aller au menu principal