Agence web » Actualités du digital » 8 nouvelles fonctionnalités principales de PHP 8 –

8 nouvelles fonctionnalités principales de PHP 8 –

Logo PHP

PHP 8 est sorti fin novembre 2020. C’est une nouvelle version majeure qui met à niveau le langage avec des fonctionnalités supplémentaires et des améliorations de performances.

Dans cet article, nous examinerons huit des plus grandes améliorations offertes par PHP 8. La liste complète des ajouts et des modifications se trouve dans la documentation officielle. La documentation comprend également un guide de migration complet à utiliser lors de la mise à jour de projets à partir de PHP 7.4.

1. Attributs

Les attributs, également appelés annotations dans d’autres langues, fournissent un mécanisme pour ajouter des métadonnées à votre base de code. Les attributs peuvent être utilisés avec des classes, des méthodes, des fonctions et des propriétés. Ils sont plus faciles à utiliser que l’approche docblock adoptée par de nombreux projets PHP 7.

Les attributs sont définis comme des classes simples, elles-mêmes annotées avec PHP intégré Attribute attribut:

#[Attribute]
class CloudSavvyAttribute {
 
    protected string $value;
 
    public function __construct(string $value) {
        $this ->; value = $value;
    }
 
    public function getValue() : string {
        return $this ->; value;
    }
 
}

Ils peuvent ensuite être attachés à des entités dans votre base de code:

#[CloudSavvyAttribute("Example")]
class CloudSavvyClass {
    // ...
}

Les attributs sont récupérés via l’API Reflection. Vous pouvez inspecter et construire des attributs définis sur une classe, une méthode ou un autre composant de base de code. Les attributs sont susceptibles d’être les plus utiles dans les frameworks et les bibliothèques, où ils aideront à faire abstraction du mappage ponctuel des composants d’application, tels que les définitions d’itinéraire et les fils d’injection de dépendances.

2. Arguments nommés

Les arguments nommés vous permettent de transmettre des paramètres aux méthodes et fonctions à l’aide d’une construction de type tableau. Cela permet d’ignorer les paramètres facultatifs et de les passer dans le désordre.

function foo(?string $a=null, ?string $b=null, ?string $c=null) : void;

En PHP 7, appeler la fonction ci-dessus en passant la valeur "demo" à $c nécessitait l’invocation suivante:

En PHP 8, la syntaxe suivante peut être utilisée à la place:

Cela rend les appels de fonction avec de nombreux arguments optionnels moins répétitifs et plus faciles à gérer.

Remplir les propriétés d’une classe avec des valeurs initiales est l’un des rôles les plus fréquents d’un constructeur. Un code similaire au suivant est courant dans les bases de code PHP 7:

class Example {
 
    protected ?string $Property;
 
    public function __construct(?string $Property=null) {
        $this ->; Property = $Property;
    }
 
}

PHP 8 ajoute la prise en charge de la promotion des propriétés du constructeur, une syntaxe abrégée qui vous permet de combiner la définition de propriété, l’indication de type et la population en ligne dans la signature du constructeur. L’exemple ci-dessus pourrait être réécrit comme suit:

class Example {
    public function __construct(
        protected string $Property=null
    )
}

Ce style supprime la répétition. Son utilisation facilite l’ajout de propriétés de constructeur supplémentaires à l’avenir, réduisant le nombre de sections de code que vous devrez modifier.

4. Types de syndicats

Le système de types de PHP continue de se développer avec PHP 8. Il est maintenant possible d’indiquer les types comme une «union» de deux types ou plus, où la valeur du type peut dériver de n’importe lequel des types de l’union.

public function foo(string|int $bar) : int|float;

Dans l’exemple artificiel ci-dessus, le foo() La fonction accepte à la fois les chaînes et les entiers. Il renverra soit un entier soit un flottant.

En pratique, cette capacité sera probablement plus utile lorsqu’elle est appliquée aux propriétés et aux paramètres de méthode – c’est une bonne forme pour accepter une variété de types d’entrée et normaliser à un type de sortie unique bien défini.

5. Expression de correspondance

Le nouveau match l’expression est une alternative plus sûre à la célèbre switch. Il ne nécessite pas l’utilisation de case et break instructions, prend en charge les conditions combinées et renvoie une valeur au lieu de saisir un nouveau bloc de code. La coercition de type est désactivée, donc 1.0 (float) n’est pas considéré comme équivalent à "1.0" (chaîne), contrairement à l’utilisation switch.

Voici un PHP 7 typique switch:

switch (1.0) {
    case 1.0:
        $result = "Float!";
        break;
    case "foo":
    case "bar":
        $result = "foobar!";
        break;
}

Et voici à quoi pourrait ressembler le même code avec PHP 8:

$result = match (1.0) {
    1.0 =>; "Float!",
    "foo", "bar" =>; "foobar!"
}

Encore une fois, la nouvelle approche est beaucoup plus concise. Une mise en garde à souligner est que les valeurs de syntaxe des conditions combinées ne sont pas définies dans un tableau, mais plutôt comme un simple ensemble délimité par des virgules, semblable à l’appel d’une fonction.

6. L’opérateur «Nullsafe»

Autre concept emprunté à d’autres langages, PHP 8 prend désormais en charge la vérification des null en ligne avec court-circuitage automatique. Vous pouvez créer une chaîne de contrôles qui échoueront, retournant null, lorsque l’évaluation d’un élément échoue.

En PHP 7:

$photo = null;
if ($user !== null) {
    if ($user ->; profile !== null) {
        if ($user ->; profile ->; getPhoto() !== null) {
            $photo = $user ->; profile ->; getPhoto() ->; getPath();
        }
    }
}

Et en PHP 8:

$photo = $user? ->; profile? ->; getPhoto()? ->; getPath();

PHP 8 fournit à nouveau une solution plus simple, qui élimine l’imbrication. Il en résulte beaucoup moins de code à tester et à maintenir.

7. Système de type plus strict

Nous avons déjà examiné comment les types d’Union ajoutent une autre couche de flexibilité au système de type PHP 8. Un certain nombre de modifications supplémentaires dans ce domaine améliorent la rigueur et la cohérence avec lesquelles la vérification de type est appliquée.

Les comparaisons de chaîne à nombre sont désormais plus saines. 0 (entier) n’est plus équivalent à "" (chaîne vide) et des comparaisons telles que 123 == "123abc" évaluer maintenant à false, ne pas true. Ces modifications aident à réduire le risque d’erreurs de comparaison dans votre base de code, bien que certains travaux puissent être nécessaires pour garantir la compatibilité des projets hérités.

Le système de type a également acquis une mixed type (pour indiquer que tout type de valeur est compatible), ainsi qu’un static type de retour (prenant en charge la liaison statique tardive). Ailleurs, les signatures des méthodes abstraites dans les traits sont désormais correctement vérifiées.

Dans l’ensemble, ces changements font progresser le support de PHP pour la programmation fortement typée. L’utilisation cohérente de l’indication de type élimine de nombreux bogues qui peuvent exister dans des langages faiblement typés, offrant aux développeurs une plus grande confiance dans le fonctionnement du code comme prévu.

8. JIT

La dernière entrée de notre liste est une capacité plus en coulisses, plutôt qu’une fonctionnalité de langue. PHP 8 ajoute le support de la compilation Just-In-Time, qui a le potentiel d’améliorer considérablement les performances.

Les scripts de longue durée hébergeant des tâches répétitives sont les plus susceptibles de bénéficier de la compilation JIT. Les benchmarks indiquent que l’amélioration sera moins prononcée dans les applications Web, où PHP est le plus souvent trouvé. L’ajout du JIT peut cependant aider PHP à s’étendre dans d’autres domaines de la programmation, améliorant ainsi l’attrait et la polyvalence du langage.

Le JIT doit être activé en utilisant les nouveaux paramètres dans le php.ini fichier de configuration. Des indications détaillées sur les valeurs disponibles et leurs effets peuvent être trouvées dans la documentation; cependant, ce qui suit est conseillé par défaut:

<code>opcache.enable=1
opcache.jit_buffer_size=100M
opcache.jit=1255</code>

Conclusion

Nous n’avons examiné que huit des ajouts et modifications les plus importants de PHP 8. Il vaut la peine de consulter les notes de publication officielles avant de commencer à utiliser PHP 8 dans vos projets car il y a beaucoup plus de fonctionnalités mineures que nous n’avons pas pu couvrir ici .

Bien que la plupart des changements soient rétrocompatibles, les pièges potentiels incluent les améliorations du système de types et les changements dans la bibliothèque standard. Vous pouvez trouver le guide de migration complet sur le site de documentation PHP.