Diferenças de objetos

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.

  • Construtores e Destrutores são proibidos.
  • Herança não é suportada. Enums não podem estender ou ser estendidos.
  • Propriedades estáticas ou de objeto não são permitidas.
  • Clonar um caso Enum não é suportado, pois os casos devem ser instâncias singleton.
  • Métodos mágicos, exceto para aqueles listados abaixo, não são permitidos.
  • Enums sempre precisam ser declarados antes de serem utilizados.

As seguintes funcionalidades de objeto estão disponíveis, e se comportam exatamente como em qualquer outro objeto:

  • Métodos públicos, privados e protegidos.
  • Métodos estáticos públicos, privados e protegidos.
  • Constantes públicas, privadas e protegidas.
  • Enums podem implementar qualquer número de interfaces.
  • Enums e casos podem ter atributos anexados a eles. O filtro de alvo TARGET_CLASS inclui as próprias Enums. O filtro de alvo TARGET_CLASS_CONST inclui Casos Enum.
  • Os métodos mágicos __call, __callStatic, e __invoke
  • Constantes __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
?>
add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top