Difencias de objetos

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.

  • Constructores y Destructores están prohibidos.
  • No soporta herencia. Las enumeraciónes no pueden heredarse ni ser heredadas.
  • Propiedades estáticas o de objeto no están permitidas.
  • Clonar un caso de Enum no está soportado, ya que los casos deben ser instancias singleton.
  • Métodos mágicos, excepto los listados a continuación, están prohibidos.
  • Las enumeraciónes deben declararse siempre antes de ser usadas.

Las siguientes funcionalidades de objetos están disponibles y se comportan 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 enumeraciónes pueden implementar cualquier número de interfaces.
  • Atributos pueden ser adjuntados a enumeraciónes y casos. El filtro de destino TARGET_CLASS incluye las enumeraciónes en sí. El filtro de destino TARGET_CLASS_CONST incluye los Casos de Enum.
  • Los métodos mágicos __call, __callStatic, e __invoke.
  • Las constantes __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
?>
add a note

User Contributed Notes

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