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
?>