Хотя перечисления построены на классах и объектах, они не поддерживают полную объектно-связанную функциональность. В качестве примера, вариантам перечислений не разрешены состояния.
Перечислениям доступны следующие функциональные возможности объекта с аналогичным поведением:
TARGET_CLASS
включает сами перечисления.
Целевой фильтр TARGET_CLASS_CONST
включает варианты перечислений.
__CLASS__
и __FUNCTION__
ведут себя как обычно.
Магическая константа ::class
для типа перечисления оценивается как название перечисления,
включая любое пространство имён, точно так же, как объект.
Магическая константа ::class
в экземпляре варианта также оценивается как тип перечисления,
поскольку она — экземпляр этого типа.
Кроме того, варианты перечисления нельзя создавать через ключевое слово new
или методом
ReflectionClass::newInstanceWithoutConstructor(). Оба способа приведут к ошибке.
<?php
$clovers = new Suit();
// Error: Cannot instantiate enum Suit
$horseshoes = (new ReflectionClass(Suit::class))->newInstanceWithoutConstructor()
// Error: Cannot instantiate enum Suit
?>