Enums in PHP: Vom Chaos zur Ordnung
\n\nHaben Sie jemals Code geschrieben, in dem der Bestellstatus als String 'new', 'paid', 'shipped' gespeichert wurde? Und dann Bugs aufgrund eines Tippfehlers wie 'shippped' gefangen? Oder haben Sie einer Funktion getOrderByStatus('Active') übergeben, während dort 'active' erwartet wurde? Kommt Ihnen bekannt vor? Dann ist dieser Artikel für Sie.
Lange Zeit gab es in PHP keine nativen Aufzählungen (enums). Entwickler behalfen sich mit Klassenkonstanten, Arrays oder sogar Platzhalter-Kommentaren. Aber mit der Veröffentlichung von PHP 8.1 hat sich alles geändert. Jetzt haben wir vollwertige PHP-Aufzählungen – ein mächtiges Werkzeug, das Code sauberer, sicherer und verständlicher macht.
\n\nIn diesem Leitfaden behandeln wir PHP enums von A bis Z: von der grundlegenden Syntax bis zu fortgeschrittenen Techniken. Sie erfahren, wie Sie Aufzählungen erstellen, mit ihnen arbeiten, sie vergleichen und in realen Projekten einsetzen. Los geht's!
\n\nWas ist ein Enum in PHP?
\n\nEnum (enumeration) ist ein Datentyp, der auf eine Menge vordefinierter Werte beschränkt ist. Einfach ausgedrückt: Sie definieren eine Liste möglicher Optionen, und eine Variable kann nur einen davon annehmen. Keine zufälligen Strings, keine ungeprüften Werte.
\n\nIn PHP 8.1 sind Aufzählungen als spezielle Klassen implementiert. Jeder Wert ist ein Objekt, nicht nur eine Konstante. Das bringt viele Vorteile:
\n\n- \n
- Strenge Typisierung – der Compiler lässt
'pending'anstelle vonStatus::Pendingnicht durch \n - Sicherheit – keine versehentlichen Tippfehler \n
- Lesbarkeit – der Code spricht für sich selbst \n
- IDE-Unterstützung – Autovervollständigung funktioniert hervorragend \n
Enum-Syntax in PHP
\n\nEine Aufzählung in PHP zu erstellen ist einfach. Verwenden Sie das Schlüsselwort enum:
<?php\n\nenum OrderStatus\n{\n case New;\n case Pending;\n case Processing;\n case Shipped;\n case Delivered;\n case Cancelled;\n}\n\n\nJetzt können wir OrderStatus als Typ verwenden:
<?php\n\nfunction updateOrderStatus(OrderStatus $status): void\n{\n // Verarbeitung des Status\n}\n\n// Wert übergeben:\nupdateOrderStatus(OrderStatus::Shipped);\n\n\nVersuchen Sie, den String 'shipped' zu übergeben – PHP gibt einen Typfehler aus. Das ist die Magie von enum in PHP.
Enum mit Backing (Backed Enums)
\n\nOft müssen wir jeden Fall mit einem bestimmten Wert verknüpfen – zum Beispiel einer Zahl oder einem String für die Datenbank. In PHP nennt man das backed enum:
\n\n<?php\n\nenum OrderStatus: string\n{\n case New = 'new';\n case Pending = 'pending';\n case Processing = 'processing';\n case Shipped = 'shipped';\n case Delivered = 'delivered';\n case Cancelled = 'cancelled';\n}\n\n\nJetzt hat jeder Fall einen String-Wert. Sie können ihn über die Eigenschaft value abrufen:
<?php\n\n$status = OrderStatus::Shipped;\necho $status->value; // 'shipped'\n\n\nUnd Sie können einen Fall aus einem Wert zurückerstellen:
\n\n<?php\n\n$status = OrderStatus::from('shipped');\necho $status->name; // 'Shipped'\n\n\nDie Methode from() wirft eine Ausnahme, wenn der Wert nicht gefunden wird. Wenn Sie null erhalten möchten, verwenden Sie tryFrom().
Methoden in Enum: Verhalten innerhalb von Aufzählungen
\n\nEine der coolen Funktionen von PHP enum ist die Möglichkeit, Methoden direkt innerhalb der Aufzählung hinzuzufügen. Das verwandelt ein enum von einer einfachen Konstantenliste in ein vollwertiges Objekt mit Logik.
\n\n<?php\n\nenum OrderStatus: string\n{\n case New = 'new';\n case Pending = 'pending';\n case Processing = 'processing';\n case Shipped = 'shipped';\n case Delivered = 'delivered';\n case Cancelled = 'cancelled';\n\n public function label(): string