👋
[PHP]switchとmatchの違い
はじめに
まず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