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());
}
?>