## Diferencias con los objetos

Aunque las enumeraciones están construidas sobre clases y objetos, no admiten toda la funcionalidad relacionada con objetos. En particular, los casos de enumeración tienen prohibido tener estado.

- Los constructores y destructores están prohibidos.
- La herencia no está admitida. Las enumeraciones no pueden extender ni ser extendidas.
- No se permiten propiedades estáticas u objetuales.
- Clonar un caso de enumeración no está admitido, ya que los casos deben ser instancias singleton.
- Métodos mágicos, excepto los listados a continuación, no están permitidos.
- Las enumeraciones siempre deben declararse antes de ser usadas.

La siguiente funcionalidad de objetos está disponible y se comporta igual que en cualquier otro objeto:

- Métodos públicos, privados y protegidos.
- Métodos estáticos públicos, privados y protegidos.
- Constantes públicas, privadas y protegidas.
- Las enumeraciones pueden implementar cualquier número de interfaces.
- Las enumeraciones y los casos pueden tener atributos adjuntos a ellos. El filtro de destino `TARGET_CLASS` incluye las enumeraciones en sí. El filtro de destino `TARGET_CLASS_CONST` incluye los Casos de Enumeración.
- __call, __callStatic, y __invoke métodos mágicos
- Las constantes `__CLASS__` y `__FUNCTION__` se comportan normalmente

La constante mágica `::class` en un tipo de enumeración se evalúa al nombre del tipo incluyendo cualquier espacio de nombres, exactamente igual que un objeto. La constante mágica `::class` en una instancia de Caso también se evalúa al tipo de enumeración, ya que es una instancia de ese tipo.

Además, los casos de enumeración 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: No se puede instanciar la enumeración Suit

    $horseshoes = (new ReflectionClass(Suit::class))->newInstanceWithoutConstructor()
    // Error: No se puede instanciar la enumeración Suit

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open