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 cibleTARGET_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
?>
Version en cache
27/12/2024 08:28:18 Cette version de la page est en cache (à la date du 27/12/2024 08:28:18) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-language.enumerations.object-differences.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.