PHP 8.5.0 Beta 2 available for testing

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
?>
add a note

User Contributed Notes

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