Ответ
В PHP 8.1+ для получения случайного значения перечисления (enum) нужно:
- Получить массив всех вариантов (cases) с помощью метода
cases(). - Выбрать случайный элемент из этого массива.
Базовый пример для чистого enum (Pure Enum):
enum Status {
case DRAFT;
case PUBLISHED;
case ARCHIVED;
}
$allCases = Status::cases();
$randomCase = $allCases[array_rand($allCases)];
// $randomCase будет одним из: Status::DRAFT, Status::PUBLISHED, Status::ARCHIVED
Пример для enum со скалярными значениями (Backed Enum):
enum Status: string {
case DRAFT = 'draft';
case PUBLISHED = 'published';
case ARCHIVED = 'archived';
}
$allCases = Status::cases();
$randomCase = $allCases[array_rand($allCases)];
// Получить скалярное значение
$randomValue = $randomCase->value; // 'draft', 'published' или 'archived'
Более строгий и производительный вариант с random_int():
Функция array_rand() возвращает ключ, что добавляет лишний шаг. Лучше сразу получить случайный индекс.
$allCases = Status::cases();
$randomIndex = random_int(0, count($allCases) - 1);
$randomCase = $allCases[$randomIndex];
Важное замечание по безопасности: Для криптографически безопасной генерации случайных чисел (что важно в контексте безопасности приложения) всегда используйте random_int(), а не rand() или mt_rand().