こんにちは。もんたです。
前回の記事では、PHPの条件分岐if文についてお話致しました。
本日も引き続きPHPの条件分岐なんですが、if文ではないんですね。
今回はif文とは違った条件分岐、switch文について学んでいきたいと思います。
それでは早速進んでいこう。
switch文とは?
switch文では、任意の変数などをプログラムに比較判定させてそれぞれ違った処理を命令するためのもの。
分かりやすく言うとswitch文を使えば、「あの人が日本の人なら日本語を喋る、アメリカの人なら英語を喋る、フランスの人ならフランス語を喋る」というようにそれぞれ違った処理ができる。あくまで一つの例に過ぎないが。
なのでswitch文もif文と同じ条件分岐だ。
switch文の書き方
ではswitch文の書き方を細かく見ていこう。
switch(対象の変数){
case "値":
〜処理〜
break;
case "値":
〜処理〜
break;
case "値":
〜処理〜
break;
}
基本構文としては上記のように書く。
switch文の()内に、比較したい対象の変数などを記述し、switch文{}波括弧の中に条件分岐の処理を記述。
caseで1つの「値」を指定し、「処理」の部分にその値だった場合の処理を書く。
その後breakも忘れずに入れる。(理由は後述)
あとは条件の分だけcaseを追加していくだけとなる。
ちなみにcaseの値指定の後は、:(コロン)なので注意。
では上記の基本構文を踏まえて、自分のやりたいように当てはめてコードを記述してみる。
すると次のように記述することができる。尚、右側にはコメントアウトとして解説。
$from = "日本";
switch($from){
case "日本":
echo "おはよう"; //変数fromが日本ならおはようと出力
break;
case "アメリカ":
echo "Good morning"; //変数fromがアメリカならGood morningと出力
break;
case "フランス":
echo "Bonjour"; //変数fromがフランスならBonjourと出力
break;
}
変数は「日本」となっているので、こちらの出力結果は当然以下のようになる。
おはよう
もちろん変数の値が「アメリカ」や「フランス」の場合は、それぞれ違った指定の処理となる。
breakがなければ処理は続く
そして上記で述べたbreakだが、まずは以下の例を見てみよう。
$from = "日本";
switch($from){
case "日本":
echo "おはよう"; //変数fromが日本ならおはようと出力
case "アメリカ":
echo "Good morning"; //変数fromがアメリカならGood morningと出力
break;
case "フランス":
echo "Bonjour"; //変数fromがフランスならBonjourと出力
break;
}
上記の例では、一つ目のcaseの処理の後にbreakを記述し忘れている。
よってこの場合の出力結果は以下のようになってしまうはずだ。
おはようGood morning
プログラムは上から順に巡ってくるので、caseの値を一つ一つ比較していく。
なのでcaseの値と等しい箇所を見つけると、その中の処理が実行された後、breakを読み込んでswtch文を抜けるという流れの構造になっている。
つまり上記の結果を見て分かる通り、breakの記述がないと更にその次のcase内の処理まで実行されてしまう。
なので逆に言えば、このシステムを利用してbreakの記述を抜くことで、複数の条件に対して同じ処理を実行させたりすることもできる。
いろんな使い方があるが、基本的には処理が連続してしまわないようにbreakの記述は忘れないようにしたいところ。
ちなみにbreakの後は、;(セミコロン)なので注意。
該当するものがなかった場合の処理はdefault
上記のように、caseを追加することでいろんな値を指定することができるが、defaultを用いることによってそれら全てに該当するものがなかった場合の処理も記述することができる。
$from = "ポルトガル";
switch($from){
case "日本":
echo "おはよう"; //変数fromが日本ならおはようと出力
break;
case "アメリカ":
echo "Good morning"; //変数fromがアメリカならGood morningと出力
break;
case "フランス":
echo "Bonjour"; //変数fromがフランスならBonjourと出力
break;
default:
echo "{$from}語は話せません";
}
このようにdefaultを追加することによって、どのcaseの値にも等しくなかった場合の処理を記述することができる。
上記の例だと、変数fromは「ポルトガル」が代入されているので、どのcaseの値にも当てはまりません。
その結果default内の処理が実行される。
よってこの出力結果は以下のようになるはず。
ポルトガル語は話せません
では、これまで学んできたswitch文ですが、if文との違いは何なのだろうか。
if文との違い
if文とswitch文の違いについて見ていこう。
まずはif文を使った以下のようなコードがあるとする。
$color = "青";
if($color == "赤"){
echo "これは赤いペンです";
}elseif($color == "白"){
echo "これは白いペンです";
}elseif($color == "黒"){
echo "これは黒いペンです";
}elseif($color == "黄"){
echo "これは黄色いペンです";
}elseif($color == "青"){
echo "これは青いペンです";
}else{
echo "この色のペンは持っていません";
}
次にswitch文を使った以下のようなコードを見てみよう。
$color = "青";
switch($color){
case "赤":
echo "これは赤いペンです";
break;
case "白":
echo "これは白いペンです";
break;
case "黒":
echo "これは黒いペンです";
break;
case "黄":
echo "これは黄色いペンです";
break;
case "青":
echo "これは青いペンです";
break;
default:
echo "この色のペンは持っていません";
}
この2つのコードは、if文とswitch文でそれぞれ同じ出力結果になるコードだ。
上記それぞれのコードを見て、どちらのコードがシンプル且つ簡単に記述できるコードか。
恐らくswitch文の方がシンプルではないだろうか。
このように指定したい条件が多くなったり複雑になったりする場合は、if文ではなくてswitch文を用いることでシンプル且つ簡潔にまとめることができる。
まとめ
今回も何とか無事に学ぶことができました。
if文とswitch文、同じ条件分岐のコードなので似たようなところはありますが、それぞれちゃんと用途に応じて使いこなしていきたいですね。
というわけで次は繰り返し処理でも学んでみますか。。。
脳みそが悲鳴をあげていますが、怠らず頑張ります。笑
では最後までご覧頂きまして、ありがとうございました。