<?php
enum UserStatus: string
{
case Pending = 'P';
case Active = 'A';
case Suspended = 'S';
case CanceledByUser = 'C';
public function label(): string
{
return match($this) {
self::Pending => 'Pending',
self::Active => 'Active',
self::Suspended => 'Suspended',
self::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());
}
?>