はじめに
PHP 8で導入された match 式は、従来の switch 文に比べて多くのメリットがあります。
型の厳密比較や式としての値返却など、知っておくと開発効率がぐっと上がります。
この記事では、実際のコード例を交えながら match と switch の違いをわかりやすく解説します。
目次
基本コード例
<?php
declare(strict_types=1);
error_reporting(-1);
$v = 2;
$r = match ($v) {
'1' => '1st',
'2a' => '2nd...?',
'2' => '2nd',
'3' => '3rdt',
default => 'any',
};
echo $r; // 出力: any
$vは整数2matchは型まで厳密に比較するため、文字列'2'とはマッチせずdefaultが選ばれます。
match と switch の比較表
| 特徴 | switch | match |
|---|---|---|
| 返り値 | なし(必要なら break で制御) | 式として値を返せる(変数に代入可能) |
| 型の比較 | ゆるい比較 (==) | 厳密比較 (===) |
| 複数値のマッチ | case 1: case 2: のように書く | 1, 2 => '値' のようにまとめて書ける |
| break の必要性 | 必須 | 不要 |
| default の扱い | 任意、後ろに書く | 任意、最後に書く |
| 書き方の簡潔さ | 冗長になりやすい | 1行で簡潔、読みやすい |
まとめ
matchは 式なので値を返して変数に代入可能。- 型まで厳密に比較するため、意図しないマッチを防げる。
switchに比べてコードがスッキリ。- フォールスルーの心配がないのでバグ防止に有効。
