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