PHP 速習チュートリアル

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;