Bien que les Enums soient construites sur la base de classes et d'objets, elles ne prennent pas en charge toutes les fonctionnalités liées aux objets. En particulier, les cas d'énumérations ne peuvent pas avoir d'état.
Les fonctionnalités suivantes sont disponibles pour les objets et se comportent de la même manière que pour tout autre objet :
TARGET_CLASS
inclut les Enums elles-mêmes. Le filtre cible TARGET_CLASS_CONST
inclut les cas d'Enum.
__CLASS__
et __FUNCTION__
se comportent normalement
La constante magique ::class
sur un type Enum évalue le nom du type,
y compris l'espace de noms, exactement comme pour un objet. La constante magique ::class
sur une instance d'un cas Case évalue également le type Enum, puisqu'il s'agit d'une instance
de ce type.
En outre, les cas d'énumération ne peuvent pas être instanciés directement avec new
, ni avec
ReflectionClass::newInstanceWithoutConstructor() de la réflexion. Ces deux méthodes entraîneront une erreur.
<?php
$clovers = new Suit();
// Error: Cannot instantiate enum Suit
$horseshoes = (new ReflectionClass(Suit::class))->newInstanceWithoutConstructor()
// Error: Cannot instantiate enum Suit
?>