【PHP】SwitchでNULLの判定が0になる話。

  • 2020.12.07
  • PHP
【PHP】SwitchでNULLの判定が0になる話。

Switch文の動きは難しいですね。

ラジオボタン項目での初期値を、DBから取得してくる値によって変化させるページを作成してました。
取得した値をSwitch分で判定させて初期値を決める動きをさせようとしていた所、なんとNULLを0として判定していました…。

やっていたこと。

<label><input class=rdo type="radio" name="hoge" value="1" required <?php echo$fuga1;?>>OK</label>

<label><input class=rdo type="radio" name="hoge" value="0"<?php echo$fuga0;?>>NG</label>

こんなHTMLのラジオボタン項目に、PHPを入れ込んでいました。
PHPの$fuga1、$fuga0変数に入って来る値はもちろん”checked”です。

さてPHPの部分はこんな感じ。

switch($fuga){
	case 0: $fuga0 = 'checked';
	 break;
	case 1: $fuga1  = 'checked';
	 break;
}

$fugaにはDBから取得してきた値が入って来ます。
これのパターンとしては、「NULL、0、1」のいずれかが入って来ます。

間違ったコーディングの結果…

$fugaにNULLのパターンで、
 「○OK ○NG」
になるはずが…
 「○OK ◉NG」
となって出てきました。NULLは0だったのか…?

対策方法。


switch($fuga){

	case 0: $fuga0 = 'checked';
	 break;
	case 1: $fuga1  = 'checked';
	 break;
    default:
     break;
}

そうか。defaultが抜けていたと思い追記したが変わりませんでした。
なので…NULLのパターンを追加してあげることにしました。


switch($fuga){

    case NULL: 
	 break;
	case 0: $fuga0 = 'checked';
	 break;
	case 1: $fuga1  = 'checked';
	 break;
}

これで、NULLの時にラジオボタンにチェックがつかなくなりました。
やはり、Switch分ではNULLは0の判定になっているのかもしれません。

PHPカテゴリの最新記事