Exemples
Exemple #1 Valeurs limitées de base
<?php
enum SortOrder
{
case Asc;
case Desc;
}
function query($fields, $filter, SortOrder $order = SortOrder::Asc) { ... }
?>
Lors de la désérialisation, si une énumération et une casse ne correspondent pas à une valeur sérialisée, un avertissement sera émis et falserenvoyé.
La query()fonction peut maintenant continuer en toute sécurité dans la connaissance qui $orderest garantie d'être soit SortOrder::Asc ou SortOrder::Desc. Toute autre valeur aurait entraîné une TypeError , donc aucune autre vérification ou test d'erreur 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::Suspendedou UserStatus::CanceledByUser. Une fonction peut taper un paramètre contre UserStatuset n'accepter que ces quatre valeurs, point.
Les quatre valeurs ont une label()méthode qui renvoie une chaîne lisible par l'homme. Cette chaîne est indépendante de la chaîne équivalente scalaire "nom de la machine", qui peut être utilisée, par exemple, dans un champ de base de données ou une zone de sélection HTML.
<?php
foreach (UserStatus::cases() as $case) {
printf('<option value="%s">%s</option>\n', $case->value, $case->label());
}
?>