PHP Enum komplett erklärt: Von Switch bis Enum (Guide)

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

Warum „Enumerations in PHP“ eine Millionen-Dollar-Frage ist

\n\n

Wenn du jemals nach „Enumerations in PHP“ gegoogelt hast, weißt du: Vor PHP 8.1 war dieses Thema eine echte Herausforderung. Entwickler erfanden das Rad mit Konstanten, abstrakten Klassen und cleveren Traits immer wieder neu. Stack Overflow war voll von Fragen wie „Wie emuliere ich Enum in PHP?“, und die Antworten sammelten hunderte Upvotes.

\n\n

Aber die Zeiten haben sich geändert. Seit PHP 8.1 sind Aufzählungen (Enum) ein nativer Bestandteil der Sprache. Und das ist nicht nur syntaktischer Zucker – es ist ein mächtiges Werkzeug für sauberen, sicheren und selbstdokumentierenden Code.

\n\n

In diesem Artikel behandeln wir alles: vom klassischen Ansatz mit Konstanten bis zu modernen Enums, mit echten Beispielen und Best Practices. Los geht's!

\n\n

Das Problem: Wie PHP-Entwickler vor PHP 8.1 lebten

\n\n

Vor nativen Aufzählungen gab es zwei Hauptwege: Klassenkonstanten und „Workarounds“ mit abstrakten Klassen. Schauen wir uns beide an.

\n\n

Ansatz #1: Klassenkonstanten (am beliebtesten)

\n\n
class OrderStatus {\n    const PENDING = 'pending';\n    const PROCESSING = 'processing';\n    const SHIPPED = 'shipped';\n    const DELIVERED = 'delivered';\n    const CANCELLED = 'cancelled';\n}\n\n// Verwendung\n$status = OrderStatus::PENDING;\nif ($status === OrderStatus::PROCESSING) {\n    echo 'Bestellung wird bearbeitet';\n}
\n\n

Vorteile: Einfachheit, Verständlichkeit, Autovervollständigung in der IDE.

\n

Nachteile: Fehlende Typisierung. Jeder kann einen String 'invalid_status' übergeben – und PHP meckert nicht.

\n\n

Ansatz #2: Abstrakte Klasse + privater Konstruktor

\n\n

Fortgeschrittene Entwickler gingen noch weiter:

\n\n
abstract class OrderStatus {\n    private function __construct() {}\n    \n    public static function pending(): self {\n        return new class extends OrderStatus {};\n    }\n    public static function processing(): self {\n        return new class extends OrderStatus {};\n    }\n    // ... restliche Status
\n\n

Es funktionierte, aber der Code wurde aufgebläht. Und es war immer noch eine Emulation, keine echte Sprachunterstützung.

\n\n

Native Enums in PHP 8.1: Eine Revolution

\n\n

Mit der Veröffentlichung von PHP 8.1 wurde das Problem „Enumerations in PHP“ ein für alle Mal gelöst. Jetzt sind Aufzählungen vollwertige Typen, die:

\n\n
    \n
  • Strenge Typisierung unterstützen
  • \n
  • Eingebaute Methoden haben (name, value, cases())
  • \n
  • Interfaces implementieren können
  • \n
  • Traits unterstützen
  • \n
  • Mit match und switch integriert sind
  • \n
\n\n

Grundlegende Enum-Syntax in PHP

\n\n
enum OrderStatus {\n    case Pending;\n    case Processing;\n    case Shipped;\n    case Delivered;\n    case Cancelled;\n}\n\n// Verwendung\n$status = OrderStatus::Pending;\necho $status->name; // 'Pending'
\n\n

Einfach und elegant. Aber das ist erst der Anfang.

\n\n

Enum-Typen: Pure und Backed Enums

\n\n

PHP unterstützt zwei Arten von Aufzählungen:

\n\n

1. Pure Enum (reine Aufzählungen)

\n

Ohne Bindung an konkrete Werte. Ideal für Flags, Status, Typen.

\n\n
enum UserRole {\n    case Admin;\n    case Editor;\n    case Viewer;\n}\n\nfunction checkAccess(UserRole $role): bool {\n    return match($role) {\n        UserRole::Admin => true,\n        UserRole::Editor => true,\n        UserRole::Viewer => false,\n    };\n}
\n\n

2. Backed Enum (Aufzählungen mit Werten)

\n

Wenn du einen Enum mit einem konkreten Wert (String oder Integer) verknüpfen musst.

\n\n
enum OrderStatus: string {\n    case Pending = 'pending';\n    case Processing = 'processing';\n    case Shipped = 'shipped';\n    case Delivered = 'delivered';\n    case Cancelled = 'cancelled';\n}\n\n// Wert abrufen\n$status = OrderStatus::Shipped;\necho $status->value; // 'shipped'\n\n// Aus Wert erstellen\n$                

Blogs

Buchempfehlungen