3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

mixedな変数をswitchで条件分岐させる時に気をつけること

Posted at

PHPはこういう変数の使い方ができる。

変数$resは結果コード0~4またはエラーメッセージを格納する。

この変数の値によって条件分岐する処理を書く。

	function echo_res($res){
		switch($res) {
			case 0;
				echo "res = 0\n";
				break;
			case 1;
				echo "res = 1\n";
				break;
			case 2;
				echo "res = 2\n";
				break;
			case 3;
				echo "res = 3\n";
				break;
			case "エラー";
				echo "res = エラー\n";
				break;
		}
	}

実行のコードはこんな感じ。

<?php
	$res = 0;
	var_dump($res);
	echo_res($res);

	$res = 1;
	var_dump($res);
	echo_res($res);

	$res = 2;
	var_dump($res);
	echo_res($res);

	$res = 3;
	var_dump($res);
	echo_res($res);

	$res = "エラー";
	var_dump($res);
	echo_res($res);

?>

結果はこんな感じ

int(0)
res = 0
int(1)
res = 1
int(2)
res = 2
int(3)
res = 3
string(6) "エラー"
res = 0

$resの値がエラーメッセージの時に、0と判定されてしまっている。

var_dump( 
	"エラー" == 0, // true
	intval("エラー") // 0
);

こういうことみたいです。

思った通りの動作にしたかったら、こんな感じ。

	function echo_res($res){
		switch($res) {
			case "0";
				echo "res = 0\n";
				break;
			case "1";
				echo "res = 1\n";
				break;
			case "2";
				echo "res = 2\n";
				break;
			case "3";
				echo "res = 3\n";
				break;
			case "エラー";
				echo "res = エラー\n";
				break;
		}
	}

もしくは

	function echo_res($res){
		switch($res) {
			case 0;
				echo "res = 0\n";
				break;
			case 1;
				echo "res = 1\n";
				break;
			case 2;
				echo "res = 2\n";
				break;
			case 3;
				echo "res = 3\n";
				break;
			case -1; //-1はエラーコード
				echo "res = エラー\n";
				break;
		}
	}

エラーメッセージを$resに入れない(´・∀・`)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?