Apesar de Enums serem construídas sobre classes e objetos, elas não suportam todas as funcionalidades relacionadas a objetos. Em particular, casos Enum são proibidos de ter estado.
As seguintes funcionalidades de objeto estão disponíveis, e se comportam exatamente como em qualquer outro objeto:
TARGET_CLASS
inclui as próprias Enums. O filtro de alvo TARGET_CLASS_CONST
inclui Casos Enum.
__CLASS__
e __FUNCTION__
se comportam normalmente
A constante mágica ::class
em um tipo Enum avalia ao nome
do tipo incluindo qualquer namespace, exatamente o mesmo que um objeto. A constante mágica ::class
em uma instância de Caso também avalia para o tipo Enum, pois ele é uma
instância daquele tipo.
Adicionalmente, casos não podem ser instanciados diretamente com new
, nem com
ReflectionClass::newInstanceWithoutConstructor() em reflexão. Ambos resultarão em um erro.
<?php
$trevos = new Naipe();
// Error: Cannot instantiate enum Naipe
$ferraduras = (new ReflectionClass(Naipe::class))->newInstanceWithoutConstructor()
// Error: Cannot instantiate enum Naipe
?>