多岐の条件分岐をswitch文を使って簡単に書こう
条件の多岐分岐はを実装するために、if~elseif~elseif~文の使い方を解説しました。
ですが多岐分岐には、switch文を使うことでより簡潔で見やすいコードになります。
条件フラグによって行う処理を変えたり、ログインしたユーザーのユーザー名に合わせてメッセージを変えるなど、使いどころはいっぱいあります。
目次 Table of Contents
switch文とif~elseif~elseif文
ではさっそくswitch文を使った簡単な条件分岐の例をみてみたいと思います。
switch($flag){
case 1:
echo '$flagの値は1です。';
break;
case 2:
echo '$flagの値は2です。';
break;
case 3:
echo '$flagの値は3です。';
break;
case 4:
echo '$flagの値は4です。';
break;
default:
echo '$flagの値は1~4ではありません。';
break;
}
//
if($flag == 1){
echo '$flagの値は1です。';
} elseif ($flag == 2){
echo '$flagの値は2です。';
} elseif ($flag == 3){
echo '$flagの値は3です。';
} elseif ($flag == 4){
echo '$flagの値は4です。';
} else {
echo '$flagの値は1~4ではありません。';
}
$flagの値は3です。
$flagの数値によって表示する文字列を変える条件分岐の例です。
下には同じことをif~elseif~else文で書いた場合です。
defaultのところはどのcaseにも該当しなかった場合の処理です。
if文でいうelse文のところですね。
条件式を囲む()の数が減り見やすくなりましたし、case:をキーに条件式の部分を探しやすくなりました。
ポイントは、条件に合った処理をしたあとはそこで分岐を終えたいので、各処理のあとにbreak;で終了させているという点です。
switch処理の終点がわかりにくい場合は次のように書くこともできます。
また、分岐の処理を完全に分けず、複数の条件の時に同じ処理をさせることもできます。
これら2点を合わせたコード例を以下に示します。
switch($name):
case 'souzi':
case 'tosizou':
case 'ryoma':
case 'hazime':
echo $name.'さんは試験合格です!';
break;
case 'izou':
echo $name.'さんは不合格です・・・。';
break;
endswitch;
//
if(($name == 'souzi') || ($name == 'tosizou') || ($name == 'ryoma') || ($name == 'hazime')){
echo $name.'さんは試験合格です!';
} elseif ($name == 'izou'){
echo $name.'さんは不合格です・・・。';
}
ryomaさんは試験合格です!
下のif文に比べると、条件の部分が縦に並んでいるので一目で見やすいですね。
switch:~endswitch; という書き方は、{~}に変わる書き方で、switchに限らず使うことができます。
if文なら if(条件式):~endif; という書き方もできます。
switch文で注意したい点
switch文のcaseでの条件処理は、「==」によって行われており、「===」ではありません。
つまり、値の型の一致までは見ていないということです。
以下の例を見てみます
$flag = (int) $flag;
switch($flag){
case '1':
echo '$flagの値は1です。';
break;
case '2':
echo '$flagの値は2です。';
break;
case '3':
echo '$flagの値は3です。';
break;
case '4':
echo '$flagの値は4です。';
break;
}
このあたりの違いだけ一応知っておき、できるだけ自分が見やすい条件文を書きたいところです。
いきなり難しい書き方をするよりは、慣れたやり方で分岐の間違いをしないことの方が大事です。
コメントフォーム
自分の勉強にもなりますので、コメントいただけるとうれしいです。