👋

[PHP]switchとmatchの違い

2024/07/11に公開

はじめに

まずmatchについて見ていきたいと思います。

$color = 'yellow';

$fruit = match($color){
    'red'    => 'apple',
    'yellow' => 'banana',
    'green'  =>  'melon',
    default  => 'not selected'
};

echo $fruit; //出力:banana

switchと似てますよね!
では、違いについてみていきたいと思います。

breakが不要

switchの場合、「平日」と表示して欲しかったのですが、breakを入れていないため「休日」が表示されてしまっています。

$dayNumber = 1;
switch ($dayNumber) {
    case 1:
        $dayName = '平日';
    case 2:
        $dayName = '休日';
        break;
    default:
        $dayName = '祝日';
        break;
}
echo $dayName; //出力:休日

matchの場合、breakが暗黙的につくためちゃんと「平日」と出力します。
ちなみにすべての値にマッチしないとき「UnhandledMatchError」が起こるので、defaultはつけたほうがいいと思います。

$dayNumber = 1;
$dayName = match($dayNumber){
    1        => '平日',
    2        => '休日',
    default  => '祝日'
};
echo $dayName; //出力:平日

等価演算子の厳しさ

switch文: 緩やかな比較(==)を使用
match文: 厳密な比較(===)を使用

$value = '1';  // 文字列の '1'

// switch文の場合
switch ($value) {
    case 1:  // 整数の 1
        echo "switch: 整数の1にマッチ";
        break;
    default:
        echo "switch: マッチしませんでした。";
    //出力: 整数の1にマッチ
}

// match文の場合
$result = match ($value) {
        1 => "match: 整数の1にマッチ",
        default => "match: マッチしませんでした。",
};
echo $result;
//出力: マッチしませんでした。

最後に

自分はついついswitchを使ってしまいがちなのですが、今回調べてみてmatchのほうが使い勝手がいいことがわかりました!意識して使っていこうと思います!
以上となります。ほかに違いがあればご指摘ただければありがたいです!

Discussion