nullとfalseと0と""(空文字)の違い
条件分岐を書いていて時々nullとfalseと0と""(空文字)ってどう区別するんだっけ?
というのが偶にあります。特にフォーム未記入欄のチェック時に。
また関数にも
isset()...変数が空であるかどうかを検査する
と
empty()...変数がセットされていること、そして NULL でないことを検査する
があり、時々それぞれの値と関数の違いについて区別がつかなくなるときがあります。
まずはそれぞれの値に関数を入れてみてチェックをしてみましょう。
print_r()の場合
<?php $value = array(false,null,0,''); print_r($value); ?>
出力結果
<?php Array ( [0] => [1] => [2] => 0 [3] => ) ?>
print_r()の場合は0(ゼロ)のみ出力されました。
数値としてこの値のみ認識されました。
empty()の場合
<?php $value = array(12,false,null,0,''); for($i=0; $i<=4; $i++){ var_dump(empty($value[$i])); echo '<br>'; } ?>
結果
12 = bool(false) false = bool(true) null = bool(true) 0 = bool(true) '' = bool(true)
こちらの場合は"12"のみfalseとなりました。
empty()は空かどうかを調べるので最もです。
isset()の場合
<?php $value = array(12,false,null,0,''); for($i=0; $i<=4; $i++){ var_dump(isset($value[$i])); echo '<br>'; } ?>
結果
12 = bool(true) false = bool(true) null = bool(false) 0 = bool(true) '' = bool(true)
こちらの場合はnullのみfalseとなりました。
isset()の方はnull以外は全てtrueとして認識してくれます。
最後に比較演算子でそれぞれの値の関係を調べてみます
$a == $b ... 型はあってなくても値があってる場合。
<table border="1"> <tr> <?php $a = array('12','false','null','0','空文字'); $b = array(12,false,null,0,''); print '<td>対比</td>'; for($i=0; $i<=4; $i++){ print '<td style="background: #9E9E9E;">'.$a[$i].'</td>'; } print '</tr>'; for($i=0; $i<=4; $i++){ print '<tr>'; print '<td style="background: #9E9E9E;">'.$a[$i].'</td>'; for($num=0; $num<=4; $num++){ if($b[$i] == $b[$num]){ $ans = '<td style="background:#B9C8F3;">true</td>'; }else{ $ans = '<td style="background:#CC6C6E;">false</td>'; } print $ans; } print '</tr>'; } ?> </table>
結果
対比 | 12 | false | null | 0 | 空文字 |
12 | true | false | false | false | false |
false | false | true | true | true | true |
null | false | true | true | true | true |
0 | false | true | true | true | true |
空文字 | false | true | true | true | true |
$a === $b ... 型も値があってる場合。
<table border="1"> <tr> <?php $a = array('12','false','null','0','空文字'); $b = array(12,false,null,0,''); print '<td>対比</td>'; for($i=0; $i<=4; $i++){ print '<td style="background: #9E9E9E;">'.$a[$i].'</td>'; } print '</tr>'; for($i=0; $i<=4; $i++){ print '<tr>'; print '<td style="background: #9E9E9E;">'.$a[$i].'</td>'; for($num=0; $num<=4; $num++){ if($b[$i] === $b[$num]){ $ans = '<td style="background:#B9C8F3;">true</td>'; }else{ $ans = '<td style="background:#CC6C6E;">false</td>'; } print $ans; } print '</tr>'; } ?> </table>
結果
対比 | 12 | false | null | 0 | 空文字 |
12 | true | false | false | false | false |
false | false | true | false | false | false |
null | false | false | true | false | false |
0 | false | false | false | true | false |
空文字 | false | false | false | false | true |