switch and match
| The switch statement | |
| The match expression | |
| Strict comparison | |
| Default arms |
The switch statement
The switch statement compares one value against many case labels. When a label matches, execution starts there and continues downward until a break stops it. It fits decisions where one variable selects between many outcomes.
$role = "editor"; switch ($role) { case "admin": echo "full access"; break; case "editor": echo "can edit"; break; default: echo "read only"; }
Leaving out break is called fall-through: PHP keeps running into the next case. Use it only on purpose, with a comment that says so, because silent fall-through is a classic source of bugs.
The match expression
The match expression does the same job but returns a
value, so you assign the result instead of echoing inside every arm.
Arms use =>, accept comma-separated conditions,
and never fall through.
Because it is an expression, match fits anywhere a
value fits: on the right side of an assignment, inside a function call,
or inside another expression.
$role = "editor"; $label = match ($role) { "admin" => "full access", "editor", "author" => "can edit", default => "read only", }; echo $label;
Strict comparison
The two constructs compare differently: switch uses loose == comparison while match uses strict === comparison of value plus type. The string "200" therefore matches the integer 200 in a switch, but not in a match.
$code = "200"; var_dump($code == 200); // true under loose rules $result = match ($code) { 200 => "integer two hundred", "200" => "string two hundred", default => "other", }; echo $result;
Default arms
A switch without a matching case and without default silently does nothing. A match without a matching arm and without default throws UnhandledMatchError instead. Always add a default arm unless the exception is exactly what you want.
$action = "preview"; $message = match ($action) { "save" => "saved", "delete" => "deleted", default => "unknown action", }; echo $message;
Next: Ternary, ?? and ?->
Article author: Arthur Isaev