PHP match 式
1. PHP match 式の概要
match 式は、複数の条件チェックを処理するための新しい手法です(従来の switch 文に似ていますが、より強力です)。match 式は、ある式を複数の候補(代替案)に対して評価し、値を返します。比較には厳密な比較(strict comparison)が使用されるのが特徴です。
Tips:match 式は PHP 8.0 で新しく導入された機能です。
1.1 match と switch の主な違い
match 式と switch 文には、以下のような重要な違いがあります。
- 可読性:
match式はswitchよりも構文が簡潔で読みやすい。 - 戻り値:
match式は値を返しますが、switch文は値を返しません。 - 自動終了:
match式は条件に一致すると自動的に終了(break)しますが、switch文は手動でbreak;を記述する必要があります。 - 比較の厳密度:
match式は厳密な比較 (===) を行いますが、switch文は緩やかな比較 (==) を行います。
2. match 式のシンタックス (Syntax)
match 式の基本的な書き方は以下の通りです。
$result = match($expression) {
条件1 => 戻り値1,
条件2 => 戻り値2,
条件3, 条件4 => 戻り値3,
default => デフォルト値,
}; Tips:default アーム(枝)は、どの条件にも一致しなかったすべてのケースをキャッチします。
3. 実装例
以下の例は、switch 文の解説ページにある例と同じロジックを match 式で書き換えたものです。
$favcolor = "red";
$text = match($favcolor) {
"red" => "あなたの好きな色は赤です!",
"blue" => "あなたの好きな色は青です!",
"green" => "あなたの好きな色は緑です!",
default => "あなたの好きな色は、赤、青、緑のどれでもありません!",
};
echo $text;4. 複数値のマッチング
同じコードブロック(戻り値)に対して複数の値を一致させたい場合は、以下のように値をカンマで区切ってグループ化できます。
4.1 例:複数の値を一つの結果にまとめる
$d = 3;
$text = match($d) {
1, 2, 3, 4, 5 => "平日はとても長く感じますね!",
6, 0 => "週末が最高です!",
default => "無効な日付です",
};
echo $text;5. default キーワードの重要性
match 式では、評価対象の式に一致する条件が必ず存在するか、あるいは default ケースが定義されている必要があります。
一致する条件がなく、かつ default ケースも定義されていない場合、PHP は UnhandledMatchError 例外(exception)をスローします。
5.1 例:例外が発生するケース
以下のコードでは一致する条件がないため、エラーが投げられます。
$favcolor = "pink"; // どの条件にも一致しません
try {
$text = match($favcolor) {
"red" => "あなたの好きな色は赤です!",
"blue" => "あなたの好きな色は青です!",
"green" => "あなたの好きな色は緑です!",
// default がないため UnhandledMatchError が発生
};
} catch (\UnhandledMatchError $e) {
var_dump($e);
}
echo $text;