<?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 => 'В ожидании',
self::Active => 'Активный',
self::Suspended => 'Приостановленный',
self::CanceledByUser => 'Отменён пользователем',
};
}
}
?>
В этом примере статус пользователя ограничивается единственным значением и только из следующих вариантов:
UserStatus::Pending,
UserStatus::Active, UserStatus::Suspended
или UserStatus::CanceledByUser.
Определение в сигнатуре функции параметра с типом UserStatus
разрешит функции принимать только эти четыре значения, точка.
Каждому из четырёх значений доступен метод label(), который возвращает строку, удобную для чтения человеком.
Эта строка не зависит от строки со скалярным эквивалентом «машинного имени», который, например,
хранят в поле базы данных или выводят как значение элемента выпадающего списка в HTML-форме.
<?php
foreach (UserStatus::cases() as $case) {
printf(
"<option value=\"%s\">%s</option>\n",
$case->value,
$case->label()
);
}
?>