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.
array_find, array_any und array_all in PHP 8.4 – Arrays durchsuchen ohne Schleife
„Gibt es einen inaktiven Eintrag?", „Sind alle bezahlt?", „Hol mir den ersten Treffer" – dafür hast du bisher eine foreach-Schleife mit break geschrieben. PHP 8.4 macht daraus je eine Zeile, die genau sagt, was sie meint.
@layer in CSS: Kaskadenebenen statt !important-Wettrüsten
Irgendwann steht in jedem gewachsenen Stylesheet das erste !important – und ein halbes Jahr später das dreißigste. Mit @layer legst du die Reihenfolge einmal fest, und ab da gewinnt nicht mehr der längste Selektor, sondern die Ebene, die du bestimmt hast.