PHPの switch 文と match 式

はじめに

今回はPHP8で追加された match 式について学習し、便利そうだと思ったので、共有もかねて記事としてまとめることにしました。

switch 文について

一般的に処理を行う条件を設定する構文として if 文が存在しますが、
別の構文として switch 文があります。

$type = 1;

switch ($type) {
    case 0:
        echo "利用する";
        break;
    case 1:
        echo "利用しない";
        break;
    default:
        echo "未設定";
}

上記は $type の値によって出力するメッセージを分岐させる処理となっています。

switch 文の注意すべき点として以下の内容があります。

  1. 比較方法が厳密でないこと
  2. 処理がわかりにくいこと

比較方法が厳密でないこと


case の部分で値の比較を行っていますが、型の比較までは行っていないため、
使用には注意する必要があります。
工夫によっては厳密な型比較を行うこともできますが、そこまでして switch 文を使用したいかと言われると微妙なところです。

処理がわかりにくいこと


2 に関しては主観となっていますが、break を記載しない場合、
次の case 内の処理を行ってしまうという点を注意する必要があります。
複雑な処理になるほど break の有無に意識を向ける必要があるため、

上記の2点の存在が大きく、私は switch 文の使用を控えていました。

match 式の登場

PHP8 より switch 文の注意点を解決する match 式が登場しました。
上記のコードを match 式で記載すると以下のようになります。

$type = 1;
echo match($type) {
    0 => "利用する",
    1 => "利用しない",
    default => "未設定"
};

match 式では厳密な型比較(’===’)が行われ、
後の分岐を意識した break を記述する必要がありません。

switch 文の注意点をカバーできており、書き方もシンプルなので、機会があれば使用したいと考えています。
PHP8 から使えるので、使用を検討してみてください。