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