Obwohl Enums auf Klassen und Objekten aufgebaut sind, unterstützen sie nicht alle objektbezogenen Funktionen. Insbesondere dürfen Enum-Fälle keinen Zustand haben.
Folgende Objektfunktionalität ist verfügbar und verhält sich wie bei jedem anderen Objekt auch:
TARGET_CLASS enthält auch die Enums
selbst. Der Zielfilter TARGET_CLASS_CONST schließt
die Enum-Fälle ein.
__CLASS__ und __FUNCTION__ verhalten sich wie üblich.
Bei einem Enum-Typ entspricht die magische Konstante
::class dem Namen des Typs einschließlich des
Namensraums, genau wie bei einem Objekt. Bei einer Case-Instanz wird die
magische Konstante ::class ebenfalls nach dem Enum-Typ
ausgewertet, da es sich um eine Instanz dieses Typs handelt.
Außerdem dürfen Enum-Fälle nicht direkt mit new oder mit
ReflectionClass::newInstanceWithoutConstructor()
instanziiert werden. Beides führt zu einem Fehler.
<?php
$clovers = new Suit();
// Error: Cannot instantiate enum Suit
$horseshoes = (new ReflectionClass(Suit::class))->newInstanceWithoutConstructor()
// Error: Cannot instantiate enum Suit
?>