Хотя перечисления построены на классах и объектах, они не поддерживают все функциональные возможности, связанные с объектами. В частности, вариантам перечислений запрещено иметь состояние.
Доступны следующие функциональные возможности объекта, которые ведут себя так же, как и для любого другого объекта:
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
?>