Enums en PHP : comment utiliser les énumérations avec des exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Enums en PHP : du chaos à l'ordre

\n\n

Avez-vous déjà écrit du code où le statut d'une commande est stocké sous forme de chaîne 'new', 'paid', 'shipped' ? Et ensuite attrapé des bugs à cause d'une faute de frappe 'shippped' ? Ou passé à une fonction getOrderByStatus('Active'), alors qu'elle attendait 'active' ? Cela vous parle ? Alors cet article est pour vous.

\n\n

Pendant longtemps, PHP n'avait pas d'énumérations natives (enums). Les développeurs se débrouillaient : ils utilisaient des constantes de classe, des tableaux, voire des commentaires factices. Mais avec la sortie de PHP 8.1, tout a changé. Nous avons désormais des énumérations PHP complètes — un outil puissant qui rend le code plus propre, plus sûr et plus compréhensible.

\n\n

Dans ce guide, nous allons décortiquer les enums PHP de A à Z : de la syntaxe de base aux techniques avancées. Vous apprendrez à créer des énumérations, à travailler avec elles, à les comparer et à les utiliser dans des projets réels. C'est parti !

\n\n

Qu'est-ce qu'un Enum en PHP ?

\n\n

Un Enum (enumeration) est un type de données qui est limité à un ensemble de valeurs prédéfinies. En termes simples : vous définissez une liste d'options possibles, et une variable ne peut en prendre qu'une seule. Plus de chaînes aléatoires, plus de valeurs non vérifiées.

\n\n

En PHP 8.1, les énumérations sont implémentées comme des classes spéciales. Chaque valeur est un objet, et non une simple constante. Cela offre de nombreux avantages :

\n\n
    \n
  • Typage strict — le compilateur ne laissera pas passer 'pending' à la place de Status::Pending
  • \n
  • Sécurité — plus de fautes de frappe accidentelles
  • \n
  • Lisibilité — le code parle de lui-même
  • \n
  • Support IDE — l'autocomplétion fonctionne parfaitement
  • \n
\n\n

Syntaxe d'un Enum en PHP

\n\n

Créer une énumération en PHP est simple. Utilisez le mot-clé enum :

\n\n
<?php\n\nenum OrderStatus\n{\n    case New;\n    case Pending;\n    case Processing;\n    case Shipped;\n    case Delivered;\n    case Cancelled;\n}\n
\n\n

Nous pouvons maintenant utiliser OrderStatus comme type :

\n\n
<?php\n\nfunction updateOrderStatus(OrderStatus $status): void\n{\n    // Traitement du statut\n}\n\n// On passe la valeur :\nupdateOrderStatus(OrderStatus::Shipped);\n
\n\n

Essayez de passer la chaîne 'shipped' — PHP générera une erreur de type. C'est la magie de l'enum en PHP.

\n\n

Enum avec un backing (Backed Enums)

\n\n

Nous avons souvent besoin de lier chaque cas à une valeur spécifique — par exemple, un nombre ou une chaîne pour la base de données. En PHP, cela s'appelle un backed enum :

\n\n
<?php\n\nenum OrderStatus: string\n{\n    case New = 'new';\n    case Pending = 'pending';\n    case Processing = 'processing';\n    case Shipped = 'shipped';\n    case Delivered = 'delivered';\n    case Cancelled = 'cancelled';\n}\n
\n\n

Désormais, chaque cas a une valeur de chaîne. Vous pouvez l'obtenir via la propriété value :

\n\n
<?php\n\n$status = OrderStatus::Shipped;\necho $status->value; // 'shipped'\n
\n\n

Et vous pouvez créer un cas à partir de la valeur en sens inverse :

\n\n
<?php\n\n$status = OrderStatus::from('shipped');\necho $status->name; // 'Shipped'\n
\n\n

La méthode from() lèvera une exception si la valeur n'est pas trouvée. Si vous voulez obtenir null — utilisez tryFrom().

\n\n

Méthodes dans un Enum : comportement à l'intérieur des énumérations

\n\n

L'une des fonctionnalités géniales de l'enum PHP est la possibilité d'ajouter des méthodes directement à l'intérieur de l'énumération. Cela transforme l'enum d'une simple liste de constantes en un objet complet avec sa propre logique.

\n\n
<?php\n\nenum OrderStatus: string\n{\n    case New = 'new';\n    case Pending = 'pending';\n    case Processing = 'processing';\n    case Shipped = 'shipped';\n    case Delivered = 'delivered';\n    case Cancelled = 'cancelled';\n\n    public function label(): string                

Blogs

Book Recommendations