UPDATE:2018年11月06日
PHP switch 文
1 Minute Note
- switch文はある条件式の値によって幾つかの処理の中から特定の処理を実行する
switch(条件式){ case 式 : 文 break; case 式 : 文 break; ・・・ ・・ default: 文 break; }
- 「switch(条件式)」は、「case 式」で比較する元の値を出力する式
- 「{ }(ブロック)」内は、switch文を記述する
- 「case 式 : 文」の 式 は、「switch(条件式)」で比較する値を出力する式
- 「case 式 : 文」の 文 は、「switch(条件式)」と「case 式」の値が一致したときに実行する文
- case式の値は「整数」、「浮動小数点数」、「文字列」が利用できる
- キーワード「break」は、処理の終了を宣言するキーワード
breakがないと以降の「case文」が実行される - キーワード「default」は、「switch(条件式)」と「case 式」の値が一致しなかった場合に実行する処理
- switch文の比較は「==」と同じ動作
- ※文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコード
switch文とは
- switch文はある条件式の値によって幾つかの処理の中から特定の処理を実行する
switch(条件式){ case 式 : 文 break; case 式 : 文 break; ・・・ ・・ default: 文 break; }
- 「switch(条件式)」は、「case 式」で比較する元の値を出力する式
- 「{ }(ブロック)」内は、switch文を記述する
- 「case 式 : 文」の 式 は、「switch(条件式)」で比較する値を出力する式
- 「case 式 : 文」の 文 は、「switch(条件式)」と「case 式」の値が一致したときに実行する文
- case式の値は「整数」、「浮動小数点数」、「文字列」が利用できる
- キーワード「break」は、処理の終了を宣言するキーワード
breakがないと以降の「case文」が実行される - キーワード「default」は、「switch(条件式)」と「case 式」の値が一致しなかった場合に実行する処理
- switch文の比較は「==」と同じ動作
- ※文とはコードの記述単位の1つで、PHPの場合は「;(セミコロン)」で区切られるまでのコード
switch文は、ある同じ式「 switch(条件式) 」を用いて、結果の値を他の式の値「case 式」と比較し、一致した場合に処理を実行します。つまり、ある条件式の値によって幾つかの処理の中から特定の処理を実行する場合に使用します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!-- サンプルコード --> <?php $i = 2; switch($i){ case 1 : echo '$iの値は1です。'; break; case 2 : echo '$iの値は2です。'; break; case 3 : echo '$iの値は3です。'; break; } ?> |
結果は
となります。
switch文はif文を並べたもの「 if(式)文 if(式)文 if(式)文 」や、「 if文+elseif(文) 」を組み合わせたもの「 if(式)文 elseif(式)文 elseif(式)文 」に似ています。
if文やelseif文を並べたものは条件式を毎回評価しますが、switchの条件式は1回のみ評価されます。
上記の例をif文+elseif文で表現すると以下になります。上記のswitch文と同じことを意味します。
1 2 3 4 5 6 7 8 9 10 | <!-- サンプルコード --> <?php $i = 2; if($i == 1) echo '$iの値は1です。'; elseif($i == 2) echo '$iの値は2です。'; elseif($i == 3) echo '$iの値は3です。'; ?> |
結果は
となります。
※elseif文の場合、式は毎回評価されます。
switch文は「switch(条件式)」で指定された式の値を評価して、「case 式 :」の値と比較します。「switch(条件式)」の値と一致する「case 式」の値があった場合は、それ以降のコードをキーワード「break」まで実行します。一致する値がなかった場合、キーワード「default」が指定されていれば、それ以降のコードを実行します。キーワード「default」以降のコードも「break」に達した時点で処理を終了します。
注意しなければならないことはキーワード「break」を記述しないと、値が一致した場合に、以降のcase文をすべて実行してしまうことです。下記の「switch文の挙動」で確認下さい。
switch文の比較「 switch(条件式)とcase式の値の比較 」は「==」で比較するのと同じ動作の「緩やかな比較」です。「===」はデータ型の比較も行いますが、「==」は型の比較はされません。
switch文の挙動
- switch(条件式)の評価は1回のみ
- キーワード「break」は、処理の終了を宣言するキーワード
breakがないと以降の「case文」が実行される - case式の値は「整数」、「浮動小数点数」、「文字列」が利用できる
- キーワード「default」は、「switch(条件式)」と「case 式」の値が一致しなかった場合に実行する処理
- switch文の比較は「==」と同じ動作
switch文は行毎(文毎)に実行されます。最初の時点では何も実行しません。「switch(条件式)」を評価した結果の値と「case式」を評価した結果の値を比較して、一致する値が見つけられたときに初めて処理が実行されます。PHPはswitchブロックの終わり「switch(条件式){ }」か、または、最初のキーワード「break」まで実行を続けます。「case文」の終わりにキーワード「break」を配置しない場合は、次の「case文」の実行を続けます。
switch(条件式)の評価は1回のみ
キーワード「break」がない場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!-- サンプルコード --> <?php $a = 1; switch($a){ case 1 : echo '$aの値は1です。'; case 2 : echo '$aの値は2です。'; case 3 : echo '$aの値は3です。'; case 4 : echo '$aの値は4です。'; case 5 : echo '$aの値は5です。'; default: echo '$aの値は6です。'; } ?> |
結果は
となります。
キーワード「break」が記述されている場合は、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <!-- サンプルコード --> <?php $a = 1; switch($a){ case 1 : echo '$aの値は1です。'; break; case 2 : echo '$aの値は2です。'; case 3 : echo '$aの値は3です。'; case 4 : echo '$aの値は4です。'; case 5 : echo '$aの値は5です。'; default: echo '$aの値は6です。'; } ?> |
結果は
となります。
キーワードbreakは重要です。
case式 値のデータ型
キャストとは型変換のことです。PHPにはキャスト演算子が用意されています。詳細はこちらを参照下さい。
switch文で文字列を使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!-- サンプルコード --> <?php $sName = 'Sato'; switch($sName){ case 'Yamada' : echo '名前はYamadaです。'; break; case 'Suzuki' : echo '名前はSuzukiです。'; break; case 'Sato' : echo '名前はSatoです。'; break; } ?> |
結果は
となります。
キーワード「default」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!-- サンプルコード --> <?php $a = 10; switch($a){ case 1 : echo '$aの値は1です。'; break; case 2 : echo '$aの値は2です。'; break; default : echo '値が一致しませんでした。'; break; } ?> |
結果は
となります。
switch文の比較は「==」と同じ動作
以下の例では整数型と文字列型の数字を比較しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!-- サンプルコード --> <?php $a = 20; switch($a){ case '10' : echo '$aの値は10です。'; break; case '20' : echo '$aの値は20です。'; break; default : echo '値が一致しませんでした。'; break; } ?> |
結果は
となります。
「変数a」は整数型で、case式の値は「'(シングルクォート)」で囲い文字列型として扱っていますが、値は一致します。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | <!-- サンプルコード --> <h3>条件式は変数で値は文字列</h3> <?php $sName = 'Sato'; switch($sName){ case 'Yamada' : echo '名前はYamadaです。'; break; case 'Suzuki' : echo '名前はSuzukiです。'; break; case 'Sato' : echo '名前はSatoです。'; break; } ?> <h3>条件式は変数で値は整数値</h3> <?php $i = 5; switch($i){ case 1 : echo '値は1です。'; break; case 2 : echo '値は2です。'; break; case 3 : echo '値は3です。'; break; case 4 : echo '値は4です。'; break; case 5 : echo '値は5です。'; break; } ?> <h3>条件式は演算子を利用した式 値は整数値</h3> <?php $a = 10; $b = 2; switch($a * $b){ case 10 : echo '値は10です。'; break; case 20 : echo '値は20です。'; break; case 30 : echo '値は30です。'; break; case 40 : echo '値は40です。'; break; case 50 : echo '値は50です。'; break; } ?> <h3>条件式は演算子を利用した式 値は整数値 文は複数行実行</h3> <?php $a = 10; $b = 2; switch($a * $b){ case 10 : echo '値は10です。'; echo '値は10です。'; echo '値は10です。'; break; case 20 : echo '値は20です。'; echo '値は20です。'; echo '値は20です。'; break; case 30 : echo '値は30です。'; echo '値は30です。'; echo '値は30です。'; break; case 40 : echo '値は40です。'; echo '値は40です。'; echo '値は40です。'; break; case 50 : echo '値は50です。'; echo '値は50です。'; echo '値は50です。'; break; } ?> <h3>switch文のキーワードdefault文を実行</h3> <?php $a = 8; switch($a){ case 1 : echo '値は1です。'; break; case 2 : echo '値は2です。'; break; case 3 : echo '値は3です。'; break; case 4 : echo '値は4です。'; break; case 5 : echo '値は5です。'; break; default: echo '一致する値はありません。'; break; } ?> |
名前はSatoです。
条件式は変数で値は整数値
値は5です。
条件式は演算子を利用した式 値は整数値
値は20です。
条件式は演算子を利用した式 値は整数値 文は複数行実行
値は20です。値は20です。値は20です。
switch文のキーワードdefault文を実行
一致する値はありません。
タグ(=記事関連ワード)
日付
最終更新日:2018年11月06日