PHP 8.4.2 Released!

Différences avec les objets

Bien que les Enums soient construites sur la base de classes et d'objets, elles ne prennent pas en charge toutes les fonctionnalités liées aux objets. En particulier, les cas d'énumérations ne peuvent pas avoir d'état.

  • Les constructeurs et les destructeurs sont interdits.
  • L'héritage n'est pas pris en charge. Les Enums ne peuvent pas étendre ou être étendues.
  • Les propriétés statiques ou d'objet ne sont pas autorisées.
  • Le clonage d'un cas d'énumération n'est pas autorisé, car les cas doivent être des instances singleton.
  • Les méthodes magiques, à l'exception de celles énumérées ci-dessous, ne sont pas autorisées.
  • Les énumérations doivent toujours être déclarées avant d'être utilisées.

Les fonctionnalités suivantes sont disponibles pour les objets et se comportent de la même manière que pour tout autre objet :

  • Méthodes publiques, privées et protégées.
  • Méthodes statiques publiques, privées et protégées.
  • Constantes publiques, privées et protégées.
  • Les Enums peuvent implémenter un nombre quelconque d'interfaces.
  • Les enums et les cas peuvent avoir des attributs qui leur sont attachés. Le filtre TARGET_CLASS inclut les Enums elles-mêmes. Le filtre cible TARGET_CLASS_CONST inclut les cas d'Enum.
  • Les méthodes magiques __call, __callStatic, et __invoke
  • Les constantes __CLASS__ et __FUNCTION__ se comportent normalement

La constante magique ::class sur un type Enum évalue le nom du type, y compris l'espace de noms, exactement comme pour un objet. La constante magique ::class sur une instance d'un cas Case évalue également le type Enum, puisqu'il s'agit d'une instance de ce type.

En outre, les cas d'énumération ne peuvent pas être instanciés directement avec new, ni avec ReflectionClass::newInstanceWithoutConstructor() de la réflexion. Ces deux méthodes entraîneront une erreur.

<?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