Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains und...
https://www.Hosterplus.de
 
 
 

PHP match: Fallunterscheidungen mit dem match-Ausdruck in PHP 8

Sie befinden sich: Home > Php Tutorial > PHP match: Fallunterscheidu...

PHP match: Fallunterscheidungen mit dem match-Ausdruck in PHP 8


Eintrag am:  14.04.2026
Hits / Besucher:  19
Sprache:  Deutsch
Kategorie:  Fortgeschrittene Tut...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Mit PHP 8.0 wurde der match-Ausdruck eingeführt, eine moderne Alternative zur switch-Anweisung. Im Vergleich zu switch ist match kompakter, verwendet strikte Typvergleiche und gibt einen Wert zurück. In vielen Fällen kann match eine switch-Anweisung vollständig ersetzen und sorgt dabei für weniger Code und weniger Fehlerquellen. In diesem Tutorial lernst du die Syntax, die Unterschiede zu switch und wann welche Variante die bessere Wahl ist.

Illustration zum Tutorial: PHP match: Fallunterscheidungen mit dem match-Ausdruck in PHP 8

Zunächst wird geklärt, was den match-Ausdruck grundlegend von der bekannten switch-Anweisung unterscheidet.

Was ist der match-Ausdruck?

Der match-Ausdruck ist eine Expression, also ein Ausdruck, der einen Wert zurückgibt. Das unterscheidet ihn grundlegend von switch, das eine Anweisung (Statement) ist. Dadurch kann match direkt in Variablenzuweisungen, return-Anweisungen oder echo verwendet werden.

Grundlegende Syntax

Die Syntax von match besteht aus dem zu prüfenden Wert und einer Liste von Armen. Jeder Arm besteht aus einer Bedingung, einem Pfeil (=>) und dem Ergebniswert.

<?php

$statusCode = 200;

$text = match($statusCode) {
200 => 'OK',
301 => 'Moved Permanently',
404 => 'Not Found',
500 => 'Internal Server Error',
default => 'Unbekannter Status',
};

echo $text;
/* Ausgabe: OK */

Das Ergebnis des match-Ausdrucks wird direkt der Variable $text zugewiesen. Ein break ist nicht nötig, da match automatisch nach dem ersten Treffer abbricht. Wichtig ist das Semikolon nach der schließenden geschweiften Klammer, da der gesamte match-Ausdruck eine Anweisung ist.

match vs. switch: Die wichtigsten Unterschiede

Die Unterschiede zwischen match und switch sind fundamental und betreffen den Vergleichsmodus, den Rückgabewert und das Verhalten bei mehreren Treffern.

Strikter Vergleich statt loser Typpruefung

match verwendet den strikten Vergleich (===), während switch den losen Vergleich (==) nutzt. Das verhindert unerwartetes Verhalten bei Typumwandlungen.

<?php

$wert = '1';

/* switch: loser Vergleich, trifft case 1 */
switch ($wert) {
case 1:
echo 'switch: Integer 1';
break;
}
/* Ausgabe: switch: Integer 1 */

/* match: strikter Vergleich, trifft NICHT Integer 1 */
$ergebnis = match($wert) {
1 => 'Integer 1',
'1' => 'String 1',
default => 'Unbekannt',
};
echo $ergebnis;
/* Ausgabe: String 1 */

Bei switch wird der String '1' mit dem Integer 1 als gleich behandelt. Bei match hingegen wird exakt auf Typ und Wert geprüft. Das macht match vorhersehbarer und sicherer.

Rückgabewert statt Anweisung

match gibt einen Wert zurück und kann deshalb direkt in Zuweisungen oder als Argument verwendet werden. Bei switch muss die Variable innerhalb jedes Cases manuell gesetzt werden.

<?php

$typ = 'admin';

/* Mit switch */
switch ($typ) {
case 'admin':
$rolle = 'Administrator';
break;
case 'editor':
$rolle = 'Redakteur';
break;
default:
$rolle = 'Gast';
}

/* Mit match (kompakter) */
$rolle = match($typ) {
'admin' => 'Administrator',
'editor' => 'Redakteur',
default => 'Gast',
};

Kein Fall-Through

Bei switch werden ohne break alle nachfolgenden Cases ebenfalls ausgeführt (Fall-Through). Das ist eine häufige Fehlerquelle. Bei match gibt es kein Fall-Through. Nur der erste passende Arm wird ausgeführt, danach ist der Ausdruck beendet.

Mehrere Bedingungen pro Arm

Ein match-Arm kann mehrere Werte prüfen, indem sie durch Komma getrennt werden.

<?php

$httpCode = 301;

$kategorie = match($httpCode) {
200, 201, 204 => 'Erfolg',
301, 302 => 'Weiterleitung',
400, 403, 404 => 'Client-Fehler',
500, 502, 503 => 'Server-Fehler',
default => 'Unbekannt',
};

Mehrere Werte im selben Arm funktionieren wie ein logisches ODER: Wenn einer der Werte passt, wird das Ergebnis zurückgegeben.

Für komplexere Bedingungen lässt sich match(true) verwenden. Dabei wird jeder Arm als boolescher Ausdruck ausgewertet. Das Muster match(true) ist besonders nützlich, wenn die Bedingungen keine einfachen Wertvergleiche sind, sondern Bereiche, Funktionsaufrufe oder zusammengesetzte Ausdrücke.

<?php

$code = 403;

$kategorie = match(true) {
$code >= 200 && $code < 300 => 'Erfolg',
$code >= 300 && $code < 400 => 'Weiterleitung',
$code >= 400 && $code < 500 => 'Client-Fehler',
$code >= 500 => 'Server-Fehler',
default => 'Unbekannt',
};

echo $kategorie;
/* Ausgabe: Client-Fehler */

Der default-Arm

Der default-Arm wird ausgeführt, wenn kein anderer Arm passt. Er ist optional, sein Fehlen kann jedoch zu einem Fehler führen. In der Praxis empfiehlt es sich, einen default-Arm immer dann hinzuzufügen, wenn die möglichen Werte nicht vollständig bekannt sind oder sich ändern können.

Was passiert ohne passenden Match?

Wenn kein Arm passt und kein default definiert ist, wirft PHP einen UnhandledMatchError. Das ist ein bewusstes Design, denn es zwingt den Entwickler, alle Fälle abzudecken oder explizit einen default-Arm zu definieren.

match in der Praxis

Der match-Ausdruck eignet sich besonders gut in Kombination mit Enums. Da Enums eine feste Menge von Cases definieren, kann match alle möglichen Werte abdecken, ohne einen default-Arm zu benötigen.

<?php

enum Rolle
{
case Admin;
case Editor;
case Gast;
}

function berechtigung(Rolle $rolle): string
{
return match($rolle) {
Rolle::Admin => 'Voller Zugriff',
Rolle::Editor => 'Inhalte bearbeiten',
Rolle::Gast => 'Nur lesen',
};
}

Wird später ein neuer Enum-Case hinzugefügt, warnt PHP mit einem UnhandledMatchError, falls der match-Ausdruck nicht aktualisiert wurde. Das erhöht die Wartbarkeit des Codes.

Wann switch statt match verwenden?

Obwohl match in vielen Fällen die bessere Wahl ist, gibt es Situationen, in denen switch weiterhin sinnvoll bleibt. Match-Arme können nur einen einzelnen Ausdruck enthalten, keine Blöcke mit mehreren Anweisungen. Wenn pro Fall mehrere Zeilen Code ausgeführt werden müssen, ist switch die passende Wahl. Auch das bewusste Fall-Through-Verhalten von switch kann in bestimmten Szenarien gewollt sein.


flowchart TD
    A["match(statusCode)"] --> B{"200?"}
    B -->|Ja| C["'OK'"]
    B -->|Nein| D{"301?"}
    D -->|Ja| E["'Moved Permanently'"]
    D -->|Nein| F{"404?"}
    F -->|Ja| G["'Not Found'"]
    F -->|Nein| H{"default?"}
    H -->|Ja| I["'Unbekannt'"]
    H -->|Nein| J["UnhandledMatchError"]

Fazit

Der match-Ausdruck in PHP 8 ist eine kompaktere und sicherere Alternative zu switch. Durch strikte Vergleiche, einen Rückgabewert und das Fehlen von Fall-Through werden viele typische Fehlerquellen eliminiert. In Kombination mit Enums bildet match ein mächtiges Werkzeug für saubere Fallunterscheidungen. Für einfache Zuordnungen ist match fast immer die bessere Wahl, während switch für mehrzeilige Blöcke und bewusstes Fall-Through weiterhin seinen Platz hat. Das Verständnis beider Konstrukte ist für die Arbeit mit modernen PHP-Projekten unverzichtbar.

 


Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.