尽管枚举建立在类和对象的基础上,但它们不支持所有与对象相关的功能。特别是,枚举案例不允许具有状态。
以下对象功能可用,并且其行为与任何其他对象上的行为相同
TARGET_CLASS**目标过滤器包含枚举本身。**TARGET_CLASS_CONST**目标过滤器包含枚举案例。__CLASS__**和**__FUNCTION__**常量的行为与正常情况相同枚举类型上的::class魔术常量计算结果为包含任何命名空间的类型名称,与对象完全相同。案例实例上的::class魔术常量也计算结果为枚举类型,因为它属于该类型的实例。
此外,枚举案例不能使用new直接实例化,也不能使用反射中的ReflectionClass::newInstanceWithoutConstructor()。两者都会导致错误。
<?php
$clovers = new Suit();
// 错误:无法实例化枚举 Suit
$horseshoes = (new ReflectionClass(Suit::class))->newInstanceWithoutConstructor()
// 错误:无法实例化枚举 Suit
?>