Aunque las enumeraciónes están construidas sobre clases y objetos, no admiten toda la funcionalidad relacionada con objetos. En particular, los casos de Enum tienen prohibido tener estado.
Las siguientes funcionalidades de objetos están disponibles y se comportan igual que en cualquier otro objeto:
TARGET_CLASS
incluye las enumeraciónes en sí.
El filtro de destino TARGET_CLASS_CONST
incluye los Casos de Enum.
__CLASS__
y __FUNCTION__
se comportan como normalmente.
El literal ::class
mágico en un tipo Enum se evalúa al nombre del tipo
incluyendo cualquier espacio de nombres, exactamente igual que un objeto. El literal ::class
mágico en una instancia de Caso también se evalúa al tipo Enum, ya que es una
instancia de ese tipo.
Además, los casos de Enum no pueden ser instanciados directamente con new
, ni con
ReflectionClass::newInstanceWithoutConstructor() en reflexión. Ambos resultarán en un error.
<?php
$clovers = new Suit();
// Error: Cannot instantiate enum Suit
$horseshoes = (new ReflectionClass(Suit::class))->newInstanceWithoutConstructor()
// Error: Cannot instantiate enum Suit
?>