PHP switch文の基本的な使い方と注意点
PHP
のswitch
文の基本的な使い方を紹介します。
PHP If,else,elseif文の基本的な使い方でif
文の基本的な使い方について説明しましたが、elseif
の数が増えてくると、可読性や保守性が悪くなってしまいます。
例えば以下のような分岐処理で、比較対象を$a
ではなく$a + 1
や$b
などに条件を変更したい場合、elseif
の箇所をすべて修正する必要があります。
$a = 2;
if ($a == 1) {
echo 'aは1です';
} elseif ($a == 2) {
echo 'aは2です';
} elseif ($a == 3) {
echo 'aは3です';
} elseif ($a == 4) {
echo 'aは4です';
}
elseif
の数が多いときはswitch
文を使用することが多いです。
上記の処理をswitch
に置き換えると以下のようになります。
$a
を基準に各case
の値と比較を行っていきます。
どのcase
にも当てはまらなかった場合はdefault
の処理が実行されます。
$a = 2;
switch ($a) {
case 1:
echo 'aは1です';
break;
case 2:
echo 'aは2です';
break;
case 3:
echo 'aは3です';
break;
case 4:
echo 'aは4です';
break;
default:
echo 'aは1,2,3,4以外です';
break;
}
// 実行結果
// aは2です
switch 値A
とcase 値B
の値がイコールの場合に以降の処理が実行されます。
JavaScript
ではswitch
文のイコールは型も含めて完全に一致することが条件でしたが、PHP
は型は違っていても問題ありません。
例えば以下のようにa
が文字列の場合で、case
が数値でもイコールと判定されます。
$a = '2';
switch ($a) {
case 1:
echo 'aは1です';
break;
case 2:
echo 'aは2です';
break;
case 3:
echo 'aは3です';
break;
case 4:
echo 'aは4です';
break;
default:
echo 'aは1,2,3,4以外です';
break;
}
// 実行結果
// aは2です
case
処理の最後にbreak
コマンドを追加しなければ次のcase
処理も実行されてしまいます。
以下の例では、case 2
の処理の最後にbreak
がないため、以降のcase 3
,case 4
,default
の処理も実行されてしまいます。
breakがない場合
$a = 2;
switch ($a) {
case 1:
echo 'aは1です';
case 2:
echo 'aは2です';
case 3:
echo 'aは3です';
case 4:
echo 'aは4です';
default:
echo 'aは1,2,3,4以外です';
}
// 実行結果
// aは2です
// aは3です
// aは4です
// aは1,2,3,4以外です