Нужно ли явно указывать, что числовые значения являются константами в enum?

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

Ответ

В PHP 8.1+ при объявлении Backed Enum (перечислений со скалярными значениями) явно указывать ключевое слово const не требуется. Сами case-ы уже являются константными значениями перечисления.

Пример объявления Backed Enum с целочисленными значениями:

enum Status: int {
    case PENDING = 1;   // Это и есть константа. Ключевое слово 'const' не нужно.
    case APPROVED = 2;
    case REJECTED = 3;
}

Особенности и доступ к значениям:

  1. Каждый case — это объект, а его скалярное значение доступно через свойство ->value.
    echo Status::PENDING->value; // Выведет: 1
  2. Значения case-ов должны быть уникальными в рамках перечисления.
  3. Попытка явно объявить константу внутри enum (например, const FOO = 'bar';) возможна, но это будет отдельная сущность, не связанная с case-ами, и обычно является избыточной, что может ухудшить читаемость кода.