Exemples

Exemple #1 Valeurs limitées de base

<?php

enum SortOrder
{
case
Asc;
case
Desc;
}

function
query($fields, $filter, SortOrder $order = SortOrder::Asc)
{

}
?>

La fonction query() peut maintenant être exécutée en sachant que $order est garanti d'être soit SortOrder::Asc ou SortOrder::Desc. Toute autre valeur aurait entraîné une TypeError, donc aucune autre vérification d'erreur ou test n'est nécessaire.

Exemple #2 Valeurs exclusives avancées

<?php

enum UserStatus: string
{
case
Pending = 'P';
case
Active = 'A';
case
Suspended = 'S';
case
CanceledByUser = 'C';

public function
label(): string
{
return match(
$this) {
static::
Pending => 'Pending',
static::
Active => 'Active',
static::
Suspended => 'Suspended',
static::
CanceledByUser => 'Canceled by user',
};
}
}
?>

Dans cet exemple, le statut d'un utilisateur peut être l'un de, et exclusivement, UserStatus::Pending, UserStatus::Active, UserStatus::Suspended, ou UserStatus::CanceledByUser. Une fonction peut typer un paramètre par rapport à UserStatus et n'accepter que ces quatre valeurs, un point c'est tout.

Ces quatre valeurs ont une méthode label(), qui renvoie une chaîne lisible pour les humains. Cette chaîne est indépendante de la chaîne scalaire équivalente "nom machine", qui peut être utilisée dans, par exemple, un champ de base de données ou un menu déroulant HTML.

<?php

foreach (UserStatus::cases() as $case) {
printf('<option value="%s">%s</option>\n', $case->value, $case->label());
}
?>
To Top