Enum-Werte in konstanten Ausdrücken

Da die Fälle in der Enum selbst als Konstanten dargestellt werden, können sie in den meisten konstanten Ausdrücken als statische Werte verwendet werden: als Standardwerte für Eigenschaften, statische Variablen und Parameter und als globale Werte und Klassenkonstanten. Sie dürfen nicht in den Werten anderer Enum-Fälle verwendet werden, aber normale Konstanten können sich auf einen Enum-Fall beziehen.

Dagegen sind implizite Aufrufe magischer Methoden wie ArrayAccess in Enums in statischen oder konstanten Definitionen nicht erlaubt, da nicht absolut garantiert werden kann, dass der resultierende Wert deterministisch ist oder dass der Methodenaufruf frei von Seiteneffekten ist. Funktionsaufrufe, Methodenaufrufe und der Zugriff auf Eigenschaften sind in konstanten Ausdrücken weiterhin nicht erlaubt.

<?php
// Dies ist eine völlig zulässige Definition einer Enum.
enum Direction implements ArrayAccess
{
case
Up;
case
Down;

public function
offsetGet($val) { ... }
public function
offsetExists($val) { ... }
public function
offsetSet($val) { throw new Exception(); }
public function
offsetUnset($val) { throw new Exception(); }
}

class
Foo
{
// Dies ist erlaubt.
const Bar = Direction::Down;

// Dies ist unzulässig, da es nicht deterministisch sein kann.
const Bar = Direction::Up['short'];
// Fatal error: Cannot use [] on enums in constant expression
}

// Dies ist völlig zulässig, da es kein konstanter Ausdruck ist.
$x = Direction::Up['short'];
?>
add a note

User Contributed Notes

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