Room No.A

Activity - WEB (PHP)

  • Twitter
  • Facebook
  • Pinterest
  • Hatena
  • instagram
  • YouTube

switch文による条件分岐

2012.08.29

条件分岐は、圧倒的に if~elseif~ else文を使う事が多いのですが、switch文を使うと条件分岐をより抽象化できる気がします。

変数の単純な値(文字列を含む)の比較を複数回実行し、条件に応じて異なる処理を実行する場合などはif文より使い易く、コードの可読性も上がるのでデバッグが楽になると思います。

と、判っていても…自分はswitch文の使用頻度が低いので、スグに構文を忘れてしまいます。(^^;

つい、使い慣れたif~elseif~ else文でダラダラと冗長なコードを書いて、デバッグの段階で反省の毎日…orz

なので備忘録を兼ねて簡単な占い(?)のスクリプトを書いてみました…。
mt_rand関数で1~8のランダムな数字を発生させ、変数 $str に代入し、サンプル1のif文とサンプル2のswitch文で、双方同じ処理(条件判定)を行っています。

◆PHPマニュアル
switch - 条件分岐
mt_rand - よりよい乱数値を生成する

Sample.1 : if文で条件分岐 - sample_switch_1.php

コード・サンプル
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP:switch Sample.1</title>
</head>
<body>
<h2>今日のアナタの運勢は…

<?php
$str = mt_rand(1, 8);
if( $str == 1 ){
	echo "【☆】とても私のクチからは…元気出して下さい…゚・(つД`)・゚・";
}elseif( $str == 2 ){
	echo "【☆☆】やる事なす事、すべて裏目に出るでしょう…( ̄□ ̄||| ";
}elseif( $str == 3 ){
	echo "【☆☆☆】ドンマイ!明日があるさ…(;´Д`)";
}elseif( $str == 4 ){
	echo "【☆☆☆☆】まあまあやね…(´・ω・`)";
}elseif( $str == 5 ){
	echo "【☆☆☆☆☆】ふんッ!いつも幸運だとは限らないからなっ!( ̄へ ̄)ノ";
}elseif( $str == 6 ){
	echo "【☆☆☆☆☆☆】ハッピーな一日になるでしょうネ…多分( ̄ー ̄)ニヤリッ";
}elseif( $str == 7 ){
	echo "【☆☆☆☆☆☆☆】無敵モードです!(`・ω・´) キリッ";
}else{
	echo "【☆☆☆☆☆☆☆☆】ほほう…(*´▽`*)";
}
?>

</h2>
</body>
</html>

普通にif文で条件分岐。

 

Sample.2 : switch による分岐 - sample_switch_2.php

コード・サンプル
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP:switch Sample.2</title>
</head>
<body>
<h2>今日のアナタの運勢は…

<?php
$str = mt_rand(1, 8);
switch( $str ){
	case 1;		
		echo "【☆】とても私のクチからは…元気出して下さい…゚・(つД`)・゚・";
		break;
	case 2:
		echo "【☆☆】やる事なす事、すべて裏目に出るでしょう…( ̄□ ̄||| ";
		break;
	case 3:
		echo "【☆☆☆】ドンマイ!明日があるさ…(´Д`)";
		break;
	case 4:
		echo "【☆☆☆☆】まあまあやね…(´・ω・`)";
		break;
	case 5:
		echo "【☆☆☆☆☆】ふんッ!いつも幸運だとは限らないからなっ!( ̄へ ̄)ノ";
		break;
	case 6:
		echo "【☆☆☆☆☆☆】ハッピーな一日になるでしょうネ…多分( ̄ー ̄)ニヤリッ";
		break;
	case 7:
		echo "【☆☆☆☆☆☆☆】無敵モードです!(`・ω・´) キリッ";
		break;
	default;
		echo "【☆☆☆☆☆☆☆☆】ほほう…(*´▽`*)";
}
?>

</h2>
</body>
</html>

switch文で条件分岐。

case の行末はコロン(:)、セミコロン(;)のどちらでもOKですが、1つのスクリプト内では統一するのが基本ですね…。
ちなみに自分はコロンよりセミコロンの方が好みです。

switch文で break を書き忘れると全ての処理が実行されてしまいます。(コレをいつも忘れてしまう…)

どのケースにもマッチしない場合は default を使って条件分岐させますが、上のサンプルで default を使うのは…(ーー;)

サンプルでは、必ず1~8の数字が変数 $str に入るので、本来は 【case 8;】として処理すべきですし、自分の場合 switch文は条件判定が明確な場合に使う事が多いので default を使う場面が今一つピンと来ません。(何れかのケースに必ずマッチするならば default は不要)

▲BACK TO TOP