Ответ
Enum (перечисление) в PHP — это специальный тип данных, введённый в версии 8.1, который позволяет определять фиксированный набор именованных значений (кейсов). Это мощная замена набору констант класса, обеспечивающая строгую типизацию и автодополнение в IDE.
Основные типы enum:
-
Чистые enum (Pure Enums): Кейсы не имеют скалярного значения.
enum Status { case DRAFT; case PUBLISHED; case ARCHIVED; } function updatePost(Status $status): void { /* ... */ } updatePost(Status::PUBLISHED); // Корректно updatePost('published'); // Ошибка типа! -
Типизированные enum (Backed Enums): Каждому кейсу присваивается скалярное значение (int или string).
enum HttpStatus: int { case OK = 200; case NOT_FOUND = 404; case SERVER_ERROR = 500; } echo HttpStatus::OK->value; // 200 $status = HttpStatus::from(404); // HttpStatus::NOT_FOUND $status = HttpStatus::tryFrom(999); // null (без исключения)
Преимущества перед константами:
- Типобезопасность: Переменная типа
Statusможет содержать толькоStatus::DRAFT,Status::PUBLISHEDилиStatus::ARCHIVED. -
Методы и интерфейсы: Enums могут содержать методы и реализовывать интерфейсы.
enum Status: string { case DRAFT = 'draft'; case PUBLISHED = 'published'; public function color(): string { return match($this) { self::DRAFT => 'gray', self::PUBLISHED => 'green', }; } } echo Status::PUBLISHED->color(); // 'green' - Итерация: По всем кейсам можно пройтись через
Status::cases().