雖然列舉是建立在類別和物件之上的,但它們並不支援所有與物件相關的功能。特別是,列舉成員不允許具有狀態。
以下物件功能可用,並且其行為與在任何其他物件上的行為相同
TARGET_CLASS
目標過濾器包含列舉本身。TARGET_CLASS_CONST
目標過濾器包含列舉成員。__CLASS__
和 __FUNCTION__
常數的行為與一般常數相同用於列舉類型的 ::class
魔術常數會計算為包含任何命名空間的類型名稱,與物件完全相同。用於列舉成員的 ::class
魔術常數也會計算為列舉類型,因為它是該類型的實例。
此外,列舉成員不能使用 new
直接實例化,也不能在反射中使用 ReflectionClass::newInstanceWithoutConstructor() 實例化。兩者都會導致錯誤。
<?php
$clovers = new Suit();
// 錯誤:無法實例化列舉 Suit
$horseshoes = (new ReflectionClass(Suit::class))->newInstanceWithoutConstructor()
// 錯誤:無法實例化列舉 Suit
?>