Enums in PHP: Wie man Aufzählungen mit Codebeispielen verwendet

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Enums in PHP: Vom Chaos zur Ordnung

\n\n

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

\n\n

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\n

In 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\n

Was ist ein Enum in PHP?

\n\n

Enum (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\n

In 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 von Status::Pending nicht durch
  • \n
  • Sicherheit – keine versehentlichen Tippfehler
  • \n
  • Lesbarkeit – der Code spricht für sich selbst
  • \n
  • IDE-Unterstützung – Autovervollständigung funktioniert hervorragend
  • \n
\n\n

Enum-Syntax in PHP

\n\n

Eine Aufzählung in PHP zu erstellen ist einfach. Verwenden Sie das Schlüsselwort enum:

\n\n
<?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\n

Jetzt können wir OrderStatus als Typ verwenden:

\n\n
<?php\n\nfunction updateOrderStatus(OrderStatus $status): void\n{\n    // Verarbeitung des Status\n}\n\n// Wert übergeben:\nupdateOrderStatus(OrderStatus::Shipped);\n
\n\n

Versuchen Sie, den String 'shipped' zu übergeben – PHP gibt einen Typfehler aus. Das ist die Magie von enum in PHP.

\n\n

Enum mit Backing (Backed Enums)

\n\n

Oft 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\n

Jetzt hat jeder Fall einen String-Wert. Sie können ihn über die Eigenschaft value abrufen:

\n\n
<?php\n\n$status = OrderStatus::Shipped;\necho $status->value; // 'shipped'\n
\n\n

Und 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\n

Die Methode from() wirft eine Ausnahme, wenn der Wert nicht gefunden wird. Wenn Sie null erhalten möchten, verwenden Sie tryFrom().

\n\n

Methoden in Enum: Verhalten innerhalb von Aufzählungen

\n\n

Eine 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                

Blogs

Buchempfehlungen