Maison développement back-end PHP8 Explication des nouvelles fonctionnalités de PHP8.1 Énumération Enums

Explication des nouvelles fonctionnalités de PHP8.1 Énumération Enums

Nov 10, 2021 pm 03:09 PM
php8

Cet article est traduit, adresse originale : https://stitcher.io/blog/php-enums

PHP 8.1 : Énumérations

Ils sont enfin là - le support intégré pour les énumérations sera ajouté en PHP Prise en charge de la version 8.1 ! Certains pensent peut-être qu'ils auraient dû le faire il y a longtemps, mais vous n'avez pas entendu ma plainte ; je suis content qu'ils l'aient fait ! Cet article est consacré à une analyse approfondie des fonctionnalités nouvellement ajoutées.

Comme d'habitude dans mes articles sur les fonctionnalités PHP, nous commençons par un aperçu de haut niveau de ce à quoi ressemblent les énumérations :

enum Status
{
    case DRAFT;
    case PUBLISHED;
    case ARCHIVED;
}
Copier après la connexion

La bonne chose à propos des énumérations est qu'elles représentent un ensemble de valeurs constantes, mais surtout ces valeurs peuvent be Tapez-le comme ceci :

class BlogPost
{
    public function __construct(
        public Status $status, 
    ) {}
}
Copier après la connexion

Dans cet exemple, créer une énumération et la transmettre à aBlogPost ressemble à ceci :

$post = new BlogPost(Status::DRAFT);
Copier après la connexion

Voilà pour les bases, et comme vous pouvez le voir, ce n'est pas compliqué du tout. Bien qu’il y ait beaucoup de notes annexes à prendre, examinons de plus près les énumérations !

#Méthodes d'énumération

Les énumérations peuvent définir des méthodes, tout comme les classes. C'est une fonctionnalité très puissante, surtout lorsqu'elle est combinée avec l'opérateur de correspondance :

enum Status
{
    case DRAFT;
    case PUBLISHED;
    case ARCHIVED;
    
    public function color(): string
    {
        return match($this) 
        {
            Status::DRAFT => 'grey',   
            Status::PUBLISHED => 'green',   
            Status::ARCHIVED => 'red',   
        };
    }
}
Copier après la connexion

Les méthodes peuvent être utilisées comme ceci :

$status = Status::ARCHIVED;
$status->color(); // 'red'
Copier après la connexion

Les méthodes statiques sont également autorisées :

enum Status
{
    // …
    
    public static function make(): Status
    {
        // …
    }
}
Copier après la connexion

Vous pouvez également utiliser self dans une énumération :

enum Status
{
    // …
    
    public function color(): string
    {
        return match($this) 
        {
            self::DRAFT => 'grey',   
            self::PUBLISHED => 'green',   
            self::ARCHIVED => 'red',   
        };
    }
}
Copier après la connexion

# Interface d'énumération

Les énumérations peuvent implémenter des interfaces, tout comme les classes normales :

interface HasColor
{
    public function color(): string;
}
enum Status implements HasColor
{
    case DRAFT;
    case PUBLISHED;
    case ARCHIVED;
    
    public function color(): string { /* … */ }
}
Copier après la connexion

# Valeurs d'énumération - alias "énumérations prises en charge"

Les valeurs d'énumération sont représentées en interne par des objets, mais vous pouvez attribuer des valeurs ​​à eux selon les besoins ; cela est utile par ex. Sérialisez-les dans la base de données.

enum Status: string
{
    case DRAFT = 'draft';
    case PUBLISHED = 'published';
    case ARCHIVED = 'archived';
}
Copier après la connexion

Faites attention à la déclaration de type dans la définition de l'énumération. Il indique que toutes les valeurs d'énumération appartiennent au type donné. Vous pouvez également en faire un int. Notez que seuls les valeurs int et string sont autorisées comme valeurs d'énumération.

enum Status: int
{
    case DRAFT = 1;
    case PUBLISHED = 2;
    case ARCHIVED = 3;
}
Copier après la connexion

Le terme technique pour les énumérations de types est appelé « énumérations sauvegardées » car elles sont « soutenues » par des valeurs plus simples. Si vous décidez d'attribuer une valeur d'énumération, tous les cas doivent avoir une valeur. Vous ne pouvez pas les mélanger et les assortir. Les énumérations sans « sauvegarde » sont appelées « énumérations pures ».

#Énumérations prises en charge avec interfaces

Si vous utilisez une énumération prise en charge avec une interface, le type d'énumération doit apparaître directement après le nom de l'énumération et avant le mot-clé Implements.

enum Status: string implements HasColor
{
    case DRAFT = 'draft';
    case PUBLISHED = 'published';
    case ARCHIVED = 'archived';
    
    // …
}
Copier après la connexion

#Énumérations prises en charge par la sérialisation

Si vous souhaitez attribuer des valeurs aux cas d'énumération, vous aurez peut-être besoin d'un moyen de les sérialiser et de les désérialiser. Les sérialiser signifie que vous avez besoin d'un moyen d'accéder aux valeurs enum. Cela se fait via une propriété publique en lecture seule :

$value = Status::PUBLISHED->value; // 2
Copier après la connexion

L'énumération peut être restaurée à partir de la valeur en utilisant : Enum::from

$status = Status::from(2); // Status::PUBLISHED
Copier après la connexion

Il existe également un tryFrom qui renvoie null si une valeur inconnue est passée. Il existe une exception si vous utilisez from.

$status = Status::from('unknown'); // ValueError
$status = Status::tryFrom('unknown'); // null
Copier après la connexion

Veuillez noter que vous pouvez également utiliser les fonctions intégrées de sérialisation et de désérialisation sur les énumérations. De plus, vous pouvez utiliser json_encode avec une énumération prise en charge et le résultat sera une valeur d'énumération. Ce comportement peut être remplacé en implémentant JsonSeriallessly.

#Liste des valeurs d'énumération

Vous pouvez obtenir une liste de tous les cas disponibles dans une énumération en utilisant la méthode statique : Enum::cases()

Status::cases();
/* [
    Status::DRAFT, 
    Status::PUBLISHED, 
    Status::ARCHIVED
] */
Copier après la connexion

Notez que ce tableau contient l'objet d'énumération réel :

array_map(
    fn(Status $status) => $status->color(), 
    Status::cases()
);
Copier après la connexion

#Les énumérations sont des objets

J'ai déjà mentionné que les valeurs d'énumération sont représentées comme des objets, en fait ce sont des objets singleton. Cela signifie que vous pouvez les comparer comme ceci :

$statusA = Status::PENDING;
$statusB = Status::PENDING;
$statusC = Status::ARCHIVED;
$statusA === $statusB; // true
$statusA === $statusC; // false
$statusC instanceof Status; // true
Copier après la connexion

#Enums comme clés de tableau

Puisque les valeurs d'énumération sont en fait des objets, vous ne pouvez actuellement pas les utiliser comme clés de tableau. Ce qui suit entraînera une erreur :

$list = [
    Status::DRAFT => 'draft',
    // …
];
Copier après la connexion

Il existe une RFC pour modifier ce comportement, mais elle n'a pas encore été votée.

Cela signifie que vous ne pouvez utiliser que des énumérations comme clés dans SplObjectStorage et WeakMaps.

#Traits

Les énumérations peuvent utiliser des traits comme les classes, mais avec plus de restrictions. Le remplacement des méthodes d'énumération intégrées n'est pas autorisé et elles ne peuvent pas contenir d'attributs de classe - leur utilisation dans les énumérations est interdite.

#Réflexion et Propriétés

Comme prévu, certaines classes de réflexion ont été ajoutées pour gérer les énumérations : ReflectionEnum, ReflectionEnumUnitCase et ReflectionEnumBackedCase. Il existe également une nouvelle fonction enum_exists, qui fait exactement ce que son nom suggère.

Tout comme les classes et attributs normaux, les énumérations et leurs cas peuvent être annotés à l'aide d'attributs. Notez que le filtre TARGET_CLASS inclura également les énumérations.

Une dernière chose : l'énumération a également une propriété en lecture seule, la RFC mentionne qu'il s'agit d'un détail d'implémentation et ne doit être utilisée qu'à des fins de débogage. Mais cela mérite quand même d’être mentionné. $enum->name

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ajouter une extension MySQL à PHP8 Comment ajouter une extension MySQL à PHP8 Oct 07, 2023 pm 03:31 PM

Les étapes pour ajouter l'extension MySQL à PHP8 sont : 1. Installez la bibliothèque client MySQL ; 2. Installez les outils de développement pour PHP 8 ; 3. Téléchargez le code source de l'extension MySQL ; 4. Compilez et installez l'extension MySQL ; Extension MySQL ; 6. Redémarrez Juste un serveur Web.

Quelle est la différence entre php5 et php8 Quelle est la différence entre php5 et php8 Sep 25, 2023 pm 01:34 PM

Les différences entre php5 et php8 concernent les performances, la structure du langage, le système de types, la gestion des erreurs, la programmation asynchrone, les fonctions de bibliothèque standard et la sécurité. Introduction détaillée : 1. Amélioration des performances. Par rapport à PHP5, PHP8 présente une énorme amélioration des performances. PHP8 introduit un compilateur JIT, qui peut compiler et optimiser certains codes d'exécution à haute fréquence, améliorant ainsi la vitesse d'exécution. PHP8 introduit de nouvelles structures et fonctions de langage. PHP8 prend en charge les paramètres nommés, permettant aux développeurs de transmettre les noms des paramètres au lieu de l'ordre des paramètres, etc.

Explication graphique détaillée de la méthode d'installation et de configuration d'Apache2.4+php8.0 Explication graphique détaillée de la méthode d'installation et de configuration d'Apache2.4+php8.0 Dec 06, 2022 pm 04:53 PM

Cet article vous présentera comment installer Apache2.4 et comment configurer php8.0. L'article est accompagné d'images et d'étapes détaillées. Voyons comment installer et configurer Apache2.4+php8.0~.

Comment se connecter à la base de données en php8 Comment se connecter à la base de données en php8 Nov 16, 2023 pm 02:41 PM

PHP8 peut utiliser mysqli et PDO pour se connecter à la base de données. Introduction détaillée : 1. Utilisez mysqli pour vous connecter à la base de données en transmettant le nom du serveur de base de données, le nom d'utilisateur, le mot de passe et le nom de la base de données pour vous connecter. Ensuite, utilisez l'attribut `connect_error` pour vérifier si la connexion réussit et affichez un message d'erreur si la connexion échoue. Enfin, fermez la connexion en appelant la méthode `close()` ; 2. Utilisez PDO pour vous connecter à la base de données, et connectez-vous en passant le nom du serveur de base de données, le mot de passe et le nom de la base de données, etc.

Comment convertir les types de données php8 Comment convertir les types de données php8 Nov 16, 2023 pm 02:51 PM

Les méthodes du type de données php8 incluent la conversion d'une chaîne en entier, la conversion d'un entier en chaîne, la conversion d'une chaîne en nombre à virgule flottante, la conversion d'un nombre à virgule flottante en chaîne, la conversion d'un tableau en chaîne, la conversion d'une chaîne en tableau, la conversion d'une valeur booléenne en entier, la conversion d'un entier en Détermination et conversion de valeurs booléennes et de types de variables. Introduction détaillée : 1. La conversion d'une chaîne en un entier inclut la fonction intval() et la conversion de type forcée (int) ; 2. La conversion d'un entier en chaîne inclut la fonction strval() et la conversion de type forcée (string) ; une chaîne à un flotteur Points et ainsi de suite.

Un examen approfondi de JIT dans PHP 8 Un examen approfondi de JIT dans PHP 8 Apr 25, 2022 pm 08:46 PM

Cet article vous guidera à travers le JIT dans PHP 8 et expliquera comment JIT participe au processus d'interprétation. J'espère qu'il sera utile à tout le monde !

Quelles améliorations de performances apporte php8 ? Quelles améliorations de performances apporte php8 ? Dec 21, 2023 pm 02:44 PM

Les performances améliorées de php8 incluent : 1. Introduction du compilateur JIT ; 2. Optimisation des appels de fonctions ; 3. Amélioration du mécanisme de récupération de place ; 4. Amélioration du système de types ; 6. Optimisation du traitement des chaînes ; . Améliorer le traitement des tableaux ; 8. Introduire un nouveau mécanisme de gestion de la mémoire ; 9. Optimiser la génération de code. Introduction détaillée : 1. L'introduction du compilateur JIT PHP8 introduit le compilateur JIT, qui est une technologie de compilation dynamique qui peut convertir le code PHP en code machine pour une exécution plus efficace ;

Quelles sont les fonctionnalités de php8 ? Quelles sont les fonctionnalités de php8 ? Dec 21, 2023 pm 02:54 PM

Caractéristiques de php8 : 1. Compilateur JIT ; 2. Paramètres nommés ; 3. Types d'union ; 4. Annotations ; Amélioration des attributs du constructeur ; 7. Opérateur nullsafe ; ; 10. Améliorations de la cohérence. Introduction détaillée : 1. Compilateur JIT, PHP8 introduit la technologie de compilation juste à temps, qui compile le code PHP en code machine natif, améliorant ainsi la vitesse d'exécution du programme 2. Paramètres nommés, PHP8 prend en charge les paramètres nommés, permettant l'utilisation de noms de paramètres lors de l’appel de fonctions, etc.

See all articles