switch文とdefault:
前ページのswitch文の例では、シンプルなif文と同等の機能を果たすだけでした。if文におけるelseにあたる機能、つまり、どの条件にもマッチしなかった場合の処理を行う必要もあるでしょう。
switch文の例
if文におけるelseの役割を果たすには、default:を使用します。以下は、switch文でdefault:を使用した例です。
default_example.php
<?php
/**
* switch文でdefault:を利用した例
*
* 天候によってメッセージを変えます
*/
// 変数に値を代入
$weather = 'fair';
switch ($weather) {
// 雨の場合
case 'rain':
echo '『雨だ』' . "\n";
echo '傘をさす' . "\n";
// 雪の場合
case 'snow':
echo '『雪だわ…』' . "\n";
echo '傘をさす' . "\n";
// 晴れの場合
case 'fair':
echo '『いい天気!』' . "\n";
echo '傘ささない' . "\n";
// デフォルト
default:
echo '『訳の分からない天気だ』' . "\n";
echo '一応、傘でも…' . "\n";
}
default_example.phpの実行結果
『いい天気!』
傘ささない
『訳の分からない天気だ』
一応、傘でも…
default:の記述形式としては、『case '何らかの値':』の『'何らかの値'』がないものです。簡単ですね。
尚、default:は、switch文中で最後に記述する必要があります。
default_example.phpの解説
実行結果を見て、意図しない文字も出力されてしまって、『あれれぇ』と思ったひともいるでしょう。残念ながら、『default:』は、それだけで『else』と同じ機能を果たすという訳ではありません。defaultは、いわゆる『デフォルト』であり、switch文中で記述された場合には、必ず実行される部分なのです。
それでは、switch文中で、elseと同等の機能を実現するにはどうしたらよいのでしょうか?それには、break文を使用しなければなりません。
break文
switch文中にbreak文を記述すると、switch文を脱出してそれ以降のプログラムを実行します。つまり、switch文の中でbreak文を記述することで、switch文を終了させることができるということです。
この機能を利用し、先の例を書き替えると次のようになります。
default_example2.php
1 <?php
2 /**
3 * switch文でdefault:とbreak文を利用した例
4 *
5 * 天候によってメッセージを変えます
6 */
7
8 // 変数に値を代入
9 $weather = 'fair';
10
11 switch ($weather) {
12 // 雨の場合
13 case 'rain':
14 echo '『雨だ』' . "\n";
15 echo '傘をさす' . "\n";
16 break;
17 // 雪の場合
18 case 'snow':
19 echo '『雪だわ…』' . "\n";
20 echo '傘をさす' . "\n";
21 break;
22 // 晴れの場合
23 case 'fair':
24 echo '『いい天気!』' . "\n";
25 echo '傘ささない' . "\n";
26 break;
27 // デフォルト
28 default:
29 echo '『訳の分からない天気だ』' . "\n";
30 echo '一応、傘でも…' . "\n";
31 break;
32 }
default_example2.phpの実行結果
『いい天気!』
傘ささない
各『case 'ナントカ':』における実行文の最後に『break;』を記述しています。この例の場合、23行目の'fair'で条件にマッチしているので、echo文が実行され、break文によってswitch文を終了させています。これでif文におけるelseと同じ役割を果たすことができます。
もう少しswitch文中におけるbreak文の役割を考えてみると、break;が記述された時点でswitch文が終了、つまり、以降の条件判定が行われないため、余計な条件判定を行う必要がありません。上の例では27行目以降が余計な条件判定です。余計な条件判定を行う必要がないぶん、それだけ動作が速くなるということです。例では与えた条件が少ないですが、これがもっと多くの条件が列挙されていれば…、どういうことか想像がつくでしょう。
break文を記述しなければ、以降のcase〜も実行されます。記述すると、switch文を終了させることができます。次の例は面白いかもしれません。
default_example3.php
<?php
/**
* switch文でdefault:とbreak文を利用した例
*
* 各月における日数を表示する
* 変数の値によってメッセージが変わります
*/
// 変数に値を代入
$month = 'January';
switch ($month) {
// 31日の月
case 'January':
case 'March':
case 'May':
case 'July':
case 'August':
case 'October':
case 'December':
// メッセージを表示
echo $month . 'は31日' . "\n";
break;
// 30日の月
case 'April':
case 'June':
case 'September':
case 'November':
// メッセージを表示
echo $month . 'は30日' . "\n";
break;
// 2月
case 'February':
// メッセージを表示
echo $month . 'は28日か29日' . "\n";
break;
// どれにも当てはまらない
default:
// メッセージを表示
echo $month . 'とはおかしい!' . "\n";
break;
}
default_example3.phpの実行結果
Januaryは31日
尚、break文はswitch文中だけでなく、他の文でも使用することができます。それらについては追々紹介したいと思います。