Das match-Ausdruck in PHP 8 – switch, nur besser
match ist wie switch, aber ein Ausdruck mit Rückgabewert, striktem Vergleich und ohne break-Fallen. Für Zuordnungen ist es kürzer, sicherer und besser lesbar.
Der klassische switch hat zwei Tücken: Man vergisst leicht ein break (und fällt in den nächsten Fall durch), und er vergleicht locker (0 == "text" war lange true). PHP 8 bringt mit match eine saubere Alternative.
switch vs. match
// vorher – umständlich, break-anfällig
switch ($status) {
case 'paid': $label = 'Bezahlt'; break;
case 'open': $label = 'Offen'; break;
default: $label = 'Unbekannt';
}
// mit match – ein Ausdruck, direkt zugewiesen
$label = match ($status) {
'paid' => 'Bezahlt',
'open' => 'Offen',
default => 'Unbekannt',
};Drei Gewinne auf einen Blick: match gibt einen Wert zurück (du weist ihn direkt zu), es gibt kein Durchfallen (kein break nötig), und es vergleicht streng mit === – '1' trifft also nicht auf 1.
Mehrere Werte pro Zweig
Kommagetrennt fasst du Fälle zusammen:
$typ = match ($code) {
200, 201, 204 => 'Erfolg',
400, 404, 422 => 'Client-Fehler',
500, 502, 503 => 'Server-Fehler',
default => 'Sonstiges',
};Ein wichtiger Unterschied: Fehlt ein Zweig und kein default, wirft match eine UnhandledMatchError – statt still null zu liefern wie ein switch ohne Treffer. Das ist gewollt: Ein unbehandelter Fall ist meist ein Bug, den du sofort bemerken willst.
Für echte Verzweigungen mit mehreren Anweisungen pro Fall bleibt if/switch richtig – für saubere Zuordnungen ist match das modernere Werkzeug.
Gut lesbaren, sicheren PHP-Code schreibe ich in jedes Projekt. Wenn du eine Website mit eigenem Backend brauchst: 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.