Как выбрать случайную константу enum в PHP?

«Как выбрать случайную константу enum в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В PHP 8.1+ для получения случайного значения перечисления (enum) нужно:

  1. Получить массив всех вариантов (cases) с помощью метода cases().
  2. Выбрать случайный элемент из этого массива.

Базовый пример для чистого 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().