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
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 →Verwandte Snippets
First-Class-Callable-Syntax in PHP: aus strlen(...) wird ein echter Wert
Funktionen als Zeichenketten weiterzureichen – 'strlen', [$objekt, 'methode'] – hat nie jemand gemocht: kein Tippfehlerschutz, keine Sprungmarke in der IDE. Seit PHP 8.1 schreibst du drei Punkte und bekommst ein Closure-Objekt.
Beträge und Zahlen in PHP formatieren – number_format, sprintf und Intl
1234.5 ist keine Anzeige, sondern ein Wert. Auf der Rechnung soll 1.234,50 € stehen, in der API 1234.50 und im Dateinamen 1234-50. Drei Aufgaben, drei Werkzeuge – und ein Fehler, den fast jeder einmal macht.
Benannte Argumente in PHP 8 – Schluss mit true, false, null, true
Ein Aufruf wie erstelle($a, true, false, null, true) sagt nichts darüber, was die Wahrheitswerte bedeuten. Mit benannten Argumenten steht es im Aufruf – und optionale Parameter lassen sich überspringen.