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