Die Wartung dieses Projekts wird über Tidelift unterstützt.
Erstens und vor allem ist SplEnum
nicht in PHP integriert, Sie müssen die Erweiterung separat installieren.
Die Verwendung einer Aufzählung anstelle von Klassenkonstanten bietet die folgenden Vorteile:
Sie können eine Aufzählung als Parametertyp verwenden: function setAction(Action $action) {
Sie können eine Aufzählung als Rückgabetyp verwenden: function getAction() : Action {
Sie können die Aufzählung mit Methoden anreichern (z. B. format
, parse
, …)
Sie können die Aufzählung erweitern, um neue Werte hinzuzufügen (machen Sie Ihre Aufzählung final
um dies zu verhindern).
Sie können eine Liste aller möglichen Werte erhalten (siehe unten).
Diese Enum-Klasse ist nicht dazu gedacht, Klassenkonstanten zu ersetzen, sondern nur dann zu verwenden, wenn es sinnvoll ist.
composer require myclabs/php-enum
use MyCLabsEnumEnum;/** * Action enum * * @extends Enum<Action::*> */final class Action erweitert Enum {private const VIEW = 'view';private const EDIT = 'edit'; }
$action = Action::VIEW();// oder mit einem dynamischen Schlüssel:$action = Action::$key();// oder mit einem dynamischen Wert:$action = Action::from($value);/ / or$action = new Action($value);
Wie Sie sehen, werden statische Methoden automatisch implementiert, um einen schnellen Zugriff auf einen Enumerationswert zu ermöglichen.
Ein Vorteil gegenüber der Verwendung von Klassenkonstanten besteht darin, dass eine Aufzählung als Parametertyp verwendet werden kann:
Funktion setAction(Action $action) {// ...}
__construct()
Der Konstruktor prüft, ob der Wert in der Aufzählung vorhanden ist
__toString()
Sie können echo $myValue
, es zeigt den Enum-Wert (Wert der Konstante) an.
getValue()
Gibt den aktuellen Wert der Aufzählung zurück
getKey()
Gibt den Schlüssel des aktuellen Werts auf Enum zurück
equals()
Testet, ob Enum-Instanzen gleich sind (gibt true
zurück, wenn die Enum-Werte gleich sind, andernfalls false
“)
Statische Methoden:
from()
Erstellt eine Enum-Instanz und prüft, ob der Wert in der Enumeration vorhanden ist
toArray()
Methode Gibt alle möglichen Werte als Array zurück (konstanter Name im Schlüssel, konstanter Wert im Wert)
keys()
Gibt die Namen (Schlüssel) aller Konstanten in der Enum-Klasse zurück
values()
Gibt Instanzen der Enum-Klasse aller Enum-Konstanten zurück (Konstantenname im Schlüssel, Enum-Instanz im Wert).
isValid()
Prüft, ob der getestete Wert im Enumerationssatz gültig ist
isValidKey()
Prüft, ob der getestete Schlüssel im Enum-Set gültig ist
assertValidValue()
Bestätigt, dass der Wert im Enum-Set gültig ist, andernfalls wird eine Ausnahme ausgelöst
search()
Rückgabeschlüssel für den gesuchten Wert
Die letzte Klassenaktion erweitert Enum {private const VIEW = 'view';private const EDIT = 'edit'; }// Statische Methode:$action = Action::VIEW();$action = Action::EDIT();
Statische Methodenhelfer werden mit __callStatic()
implementiert.
Wenn Ihnen die automatische IDE-Vervollständigung am Herzen liegt, können Sie die statischen Methoden entweder selbst implementieren:
Die letzte Klassenaktion erweitert Enum {private const VIEW = 'view';/** * @return Action */public static function VIEW() {return new Action(self::VIEW); } }
oder Sie können phpdoc verwenden (dies wird beispielsweise in PHPStorm unterstützt):
/** * @method static Action VIEW() * @method static Action EDIT() */final class Action erweitert Enum {private const VIEW = 'view';private const EDIT = 'edit'; }
Native Enum ist in PHP in Version 8.1 angekommen: https://www.php.net/enumations
Wenn Ihr Projekt PHP 8.1+ ausführt oder Ihre Bibliothek dies als Mindestanforderung vorsieht, sollten Sie es anstelle dieser Bibliothek verwenden.
Bei der Migration von myclabs/php-enum
sollte der Aufwand gering sein, wenn die Verwendung auf die empfohlene Weise erfolgte:
private Konstanten
Abschlussklassen
Keine Methode überschrieben
Änderungen zur Migration:
Die Klassendefinition sollte geändert werden
/** * @method static Action VIEW() * @method static Action EDIT() */final class Action erweitert Enum {private const VIEW = 'view';private const EDIT = 'edit'; }
Zu
Enum-Aktion: string{case VIEW = 'view';case EDIT = 'edit'; }
Alle Stellen, an denen die Klasse als Typ verwendet wurde, funktionieren weiterhin.
Verwendungszwecke und die erforderliche Änderung:
Betrieb | myclabs/php-enum | native Enumeration |
---|---|---|
Erhalten Sie eine Instanz, von der aus geändert wird | $enumCase = Action::VIEW() | $enumCase = Action::VIEW |
Erstellen Sie eine Aufzählung aus einem gesicherten Wert | $enumCase = new Action('view') | $enumCase = Action::from('view') |
Rufen Sie den gesicherten Wert der Enum-Instanz ab | $enumCase->getValue() | $enumCase->value |
Vergleichen Sie zwei Enum-Instanzen | $enumCase1 == $enumCase2 oder $enumCase1->equals($enumCase2) | $enumCase1 === $enumCase2 |
Rufen Sie den Schlüssel/Namen der Enum-Instanz ab | $enumCase->getKey() | $enumCase->name |
Rufen Sie eine Liste aller möglichen Instanzen der Enumeration ab | Action::values() | Action::cases() |
Rufen Sie eine Karte möglicher Instanzen der Enumeration ab, die nach Namen zugeordnet sind | Action::values() | array_combine(array_map(fn($case) => $case->name, Action::cases()), Action::cases()) oder (new ReflectionEnum(Action::class))->getConstants() |
Rufen Sie eine Liste aller möglichen Namen der Enumeration ab | Action::keys() | array_map(fn($case) => $case->name, Action::cases()) |
Rufen Sie eine Liste aller möglichen gesicherten Werte der Enumeration ab | Action::toArray() | array_map(fn($case) => $case->value, Action::cases()) |
Rufen Sie eine Karte möglicher gesicherter Werte der Enumeration ab, die nach Namen zugeordnet sind | Action::toArray() | array_combine(array_map(fn($case) => $case->name, Action::cases()), array_map(fn($case) => $case->value, Action::cases())) oder array_map(fn($case) => $case->value, (new ReflectionEnum(Action::class))->getConstants())) |
PHP 8.1+ native Enumeration
Doctrine-Enum-Mapping
Symfony ParamConverter-Integration
PHPStan-Integration