Unterschiede zu Objekten

Obwohl Enums auf Klassen und Objekten aufgebaut sind, unterstßtzen sie nicht alle objektbezogenen Funktionen. Insbesondere dßrfen Enum-Fälle keinen Zustand haben.

  • Konstruktoren und Destruktoren sind nicht erlaubt.
  • Vererbung wird nicht unterstĂźtzt; Enums dĂźrfen weder erweitern noch erweitert werden.
  • Statische oder Objekteigenschaften sind nicht erlaubt.
  • Enum-Fälle dĂźrfen nicht geklont werden, weil die Fälle Singleton-Instanzen sein mĂźssen.
  • Magische Methoden sind mit Ausnahme der unten aufgefĂźhrten nicht erlaubt.
  • Enums mĂźssen immer deklariert werden, bevor sie verwendet werden.

Folgende Objektfunktionalität ist verfßgbar und verhält sich wie bei jedem anderen Objekt auch:

  • Public, private und protected Methoden.
  • Public, private und protected statische Methoden.
  • Public, private, und protected Konstanten.
  • Enums kĂśnnen eine beliebige Anzahl von Schnittstellen implementieren.
  • Zu Enums und Fällen kĂśnnen Attribute hinzugefĂźgt werden. Der Zielfilter TARGET_CLASS enthält auch die Enums selbst. Der Zielfilter TARGET_CLASS_CONST schließt die Enum-Fälle ein.
  • Die magischen Methoden __call, __callStatic, und __invoke
  • Die Konstanten __CLASS__ und __FUNCTION__ verhalten sich wie Ăźblich.

Bei einem Enum-Typ entspricht die magische Konstante ::class dem Namen des Typs einschließlich des Namensraums, genau wie bei einem Objekt. Bei einer Case-Instanz wird die magische Konstante ::class ebenfalls nach dem Enum-Typ ausgewertet, da es sich um eine Instanz dieses Typs handelt.

Außerdem dürfen Enum-Fälle nicht direkt mit new oder mit ReflectionClass::newInstanceWithoutConstructor() instanziiert werden. Beides führt zu einem Fehler.

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