MWCodebymw.de ↗
PHP

Enums in PHP 8.1 – feste Werte typsicher modellieren

Status als "offen"/"bezahlt"-Strings sind fehleranfällig – ein Tippfehler fällt erst zur Laufzeit auf. PHP-8.1-Enums geben dir feste, typsichere Werte mit Methoden, und die IDE meckert sofort.

Einen Bestellstatus als String "paid" durch die App zu reichen, ist eine Einladung für Tippfehler – "payed" fällt erst zur Laufzeit auf, wenn überhaupt. Seit PHP 8.1 gibt es echte Enums: ein fester Satz benannter Werte, den der Typ-Check erzwingt.

Backed Enum mit Methode

Ein „backed" Enum hängt an jedem Fall einen skalaren Wert (hier einen String für die Datenbank) und kann eigene Methoden mitbringen:

enum Status: string
{
    case Offen      = 'open';
    case Bezahlt    = 'paid';
    case Storniert  = 'cancelled';

    public function label(): string
    {
        return match ($this) {
            Status::Offen      => 'Offen',
            Status::Bezahlt    => 'Bezahlt',
            Status::Storniert  => 'Storniert',
        };
    }
}

Typsicher verwenden

Als Parametertyp akzeptiert die Funktion jetzt nur gültige Fälle – ein falscher String kommt gar nicht erst durch:

function darfBearbeiten(Status $status): bool
{
    return $status === Status::Offen;
}

echo Status::Bezahlt->label();     // "Bezahlt"
echo Status::Bezahlt->value;       // "paid" (für die DB)

Aus der Datenbank zurücklesen

from() wandelt einen gespeicherten Wert zurück in einen Fall (und wirft bei Unbekanntem); tryFrom() liefert stattdessen null:

$status = Status::tryFrom($row['status']) ?? Status::Offen;

foreach (Status::cases() as $s) {   // alle Fälle, z. B. fürs Dropdown
    echo "<option value=\"{$s->value}\">{$s->label()}</option>";
}

Der Gewinn: Ein ungültiger Status ist nicht mehr möglich, ohne dass es sofort auffällt – die IDE schlägt dir alle Fälle vor, und ein vergessener Fall im match wird zum Fehler statt zum stillen Bug.

Saubere, typsichere Modellierung macht Backends wartbar. Genau solche baue ich – schau auf bymw.de.

Quellen

#PHP 8.1#Enum#Typsicherheit#Modellierung#Sauberer Code

Du brauchst mehr als ein Snippet?

Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.

Projekt anfragen →