【記事の要約】→switch文を使うとif文をスタイリッシュに書けます。
本記事では、以下の内容を解説します。
本記事の内容
・switch文って何なのさ?
・if文とswitch文の違い。
・具体的な使い方
この3つを中心に、ゆる〜く解説してみます。
ここではif文をちょっと変化させてswitch文にすることができるんだなぁ。
くらいに感じてもらえたらいいんじゃないかな?と思います。
PHPのswitch文ってさ、実のところどうなの?現場であんまり見たことないんだけど。書いてみると分かるけど、確かに見やすい。ただ、そんだけ?って感じがするんだよね。今更だけど、正しく使えてるのか不安になってきた\(^o^)/
— (インフラ)エンジニアのいぬ (@inuengineer) October 21, 2019
この記事を読むと分かること
- if文は何となく分かったという人。次はswitchを使ってみましょう。
- switch文の使い方が、なんとな〜く分かります。
- 楽しく学んでみましょう。
PHPエンジニアとしてwebサイト開発を行っています。
今はちょっとそれて、サーバーサイド業務を中心に毎日頑張っております。
PHPを楽しく理解する為に学習方法を工夫しています。
「switch文」って何なのさ?

簡単に言うとswitch文とは、「条件分岐」させる構文のことです。
Aを選んだ場合は、{a,b,c,d,e}
Bを選んだ場合は、{f,g,h,i,j}
Cを選んだ場合は、{k,l,m,n,o}
if文の条件分岐と同じですが、書き方が少しだけ違います。
if文で細かな条件を表現しようとすると、「if」「elseif」「else」が必要になります。
中でも「elseif」ですが、条件を付け加えていくとどうしても「elseif」の登場回数が多くなってしまいます。
<?php
if ($hoge == 0) {
echo '結果その0';
} elseif ($hoge == 1) {
echo '結果その1';
} elseif ($hoge == 2) {
echo '結果その2';
} elseif ($hoge == 3) {
echo '結果その3';
} elseif ($hoge == 4) {
echo '結果その4';
} elseif ($hoge == 5) {
echo '結果その5';
} else {
echo 'それ以外の結果';
こんな感じでどうしてもスッキリ・シンプルとは行きません。
そこで登場するのが「switch」文です。
switch文を使うと、同じ表現でもこんな感じにまとめることができます。
上の例を参考にしてswitch文を見てみます。
A,B,Cそれぞれをブロックとして、ブロック毎に処理を完結していくようなイメージです。
実践!switch文!!

実際に使うとこんな感じです。
<?php
switch ($hoge) {
case 0: //「case」を使って、if文で言うところのif,elseif,elseを表現します。
echo 'hoge';
break; //「break」を使ってcase 0を離脱しています。
case 1:
echo 'hogehoge';
break;
case 2;
echo 'hogehogehoge';
break;
default:
echo 'hogehogehogehoge';
}
ここではcase0〜case2までの、0,1,2を扱って例としました。
caseとbreakがひとまとめになっている感じ。
if文の時に使っていた「else(上のどの条件にも合わない場合の出力)」が【default;】に変わっています。
このswhitch文を見慣れたif文で書くとこんな感じです。
<?php
if ($hoge == 0) {
echo 'hoge';
} elseif ($hoge == 1) {
echo 'hogehoge';
} elseif ($hoge == 2) {
echo 'hogehogehoge';
} else {
echo 'hogehogehogehoge';
目的が同じなのに、こうも書き方が違うのは大変興味深いですよね。
if文とswitch文のどっちが優れているかとかではなく、使いたい方を使えばいいんだと思います。
ただ、僕の場合ですが、現場ではあまりswitch文を見かけませんでした。もしかしたら、慣れ親しんだ書き方の方が普及していてif文の使用率の方が若干多めなのかもしれません。
実際にswitch文を書いて試してみる

僕が前に書いた、クソif文をswitch文で書いてみたいと思います。
気になった方は下の記事を参考にしてください。

<?php
// 店主の親父に話しかけた時のリアクションをランダムで表示
$reaction = rand(1,15);
echo "reactionの番号:".$reaction." \n";
if($reaction === 1){
echo "がはは!昨日最新スマホを売って儲かったから、今日は気分がいいんだ。";
} elseif($reaction === 2) {
echo "今日はいい天気だな。";
} elseif($reaction === 3) {
echo "どうだ?今なら最新スマホが、なんと¥100,000でお買い得だぜ!";
} elseif($reaction === 4) {
echo "どうだ?今なら最新スマホが、なんと¥150,000でお買い得だぜ!しかも今なら「はがねのケース」付きよ!";
} elseif($reaction === 5) {
echo "どうだ?今なら最新スマホが、なんと¥200,000でお買い得だぜ!ゲヘヘ";
} elseif($reaction === 6) {
echo "ヘイ。いらっしゃい。何かお探しですか?";
} elseif($reaction === 7) {
echo "(最近、バカな客が増えて笑いが止まらねぇな。)";
} elseif($reaction === 8) {
echo "最新のスマホを格安で取り扱ってるのは、あっしの店だけですぜ。";
} elseif($reaction === 9) {
echo "なんだ?俺の顔になんか付いてるのか?";
} elseif($reaction === 10) {
echo "ようこそ!信頼と真心の「親父のガジェットショップ」へ。";
} else {
echo "なんだ?客じゃねぇなら、とっとと消えな。俺は忙しいんだ。";
}
?>
ここまで「elseif」が多くなることってそうそうないんですけど、もっとスマートにしたい時はswitch文に全てを託します。
ただ、書いてて感じたのですが、ぶっちゃけそんなにスマートって言う程の凄さってないですよね?
単に書き方の違いってだけな気がします。
文句を言わずにswitch文で同じ文を書いてみます。
<?php
// 店主の親父に話しかけた時のリアクションをswitch文を使ってランダムで表示
$reaction = rand(1,15);
echo "reactionの番号:".$reaction." \n";
switch ($reaction) {
case 1 :
echo "がはは!昨日最新スマホを売って儲かったから、今日は気分がいいんだ。";
break;
case 2 :
echo "今日はいい天気だな。";
break;
case 3 :
echo "どうだ?今なら最新スマホが、なんと¥100,000でお買い得だぜ!";
break;
case 4 :
echo "どうだ?今なら最新スマホが、なんと¥150,000でお買い得だぜ!しかも今なら「はがねのケース」付きよ!";
break;
case 5 :
echo "どうだ?今なら最新スマホが、なんと¥200,000でお買い得だぜ!ゲヘヘ";
break;
case 6 :
echo "ヘイ。いらっしゃい。何かお探しですか?";
break;
case 7 :
echo "(最近、バカな客が増えて笑いが止まらねぇな。)";
break;
case 8 :
echo "最新のスマホを格安で取り扱ってるのは、あっしの店だけですぜ。";
break;
case 9 :
echo "なんだ?俺の顔になんか付いてるのか?";
break;
case 10 :
echo "ようこそ!信頼と真心の「親父のガジェットショップ」へ。";
break;
default :
echo "なんだ?客じゃねぇなら、とっとと消えな。俺は忙しいんだ。";
}
※実際の動作については、お手数ですがご自身のエディタに貼り付けて表示させてみてください。
こうやって実際に書いて見ると、若干スッキリしているような気がします。
見た目をスッキリさせる以外にswitch文に使い道はあるのか?
と言われると、ぶっちゃけ分かりませんwww
まとめ
記事のポイントをまとめます。
- if文に比べて見た目が若干スッキリした気がします。(コードが)
- 実際に書いてみると……何か分かります。
- 違った手法を用いることで、よりif文を理解できます。
結果、そんなに大きな差はないと思います。
その日によって違う服が着たくなるような感覚で、コードの書き方を変えたいなぁっていう時にはswitch文が役に立つのかもしれません。
確かにブロック毎に分けられているので開始と終了がはっきりしていて見やすいとは感じました。
ただ、if文の書き方がより分かった気がしました。
どうもありがとう!