PHPの==による比較ついて
テーブルタグを除いたサンプルコード
$arr = array(null, 0, 1, '', '0', '1', true, false);
$name_arr = array("null", "0", "1", "''", "'0'", "'1'", "true", "false");
foreach ($arr as $index1 => $value1) {
if ($index1 == 0) {
foreach ($name_arr as $name_val) {
echo $name_val;
}
}
foreach ($arr as $index2 => $value2) {
if ($index2 == 0) {
echo $name_arr[$index1];
}
echo ($value1 == $value2);
}
}
- PHPで==で比較を行ったときの結果をまとめる
- null, 0, 1, '', '0', '1', true, falseを持つ配列をネストさせて1つずつ比較を行う
- 0はnullや空文字と比較した際に真となってしまうことがわかる
- これは比較前に暗黙なキャストが行われるため
- (int)'' == 0←こんな感じで暗黙的に文字列に対して数値へのキャストが行われる模様
- ←こんな感じのセレクトボックスの値をフォームで送信する際、「なし」と「未選択」のときで別の処理をしたいときなんかに引っかかったりすることがある。
|
null | 0 | 1 | '' | '0' | '1' | true | false |
null | 1 |
1 |
|
1 |
|
|
|
1 |
0 | 1 |
1 |
|
|
1 |
|
|
1 |
1 | |
|
1 |
|
|
1 |
1 |
|
'' | 1 |
|
|
1 |
|
|
|
1 |
'0' | |
1 |
|
|
1 |
|
|
1 |
'1' | |
|
1 |
|
|
1 |
1 |
|
true | |
|
1 |
|
|
1 |
1 |
|
false | 1 |
1 |
|
1 |
1 |
|
|
1 |
- 0,1ではなく1,2で==の比較を行ったときの結果をまとめる
- 0,1のときとは違いnullや空文字と比較しても一般的に想定されるような結果となることが確認できる
- ただし、1,2共にboolとの比較はtrueと一致する点に注意が必要
- PHPのシステム開発ではフォームで入力するような項目の有無を管理するに当たって0,1ではなく1,2で管理したほうが(個人的には)何かと便利だと思う
- あくまでPHPにおける真偽の値は1,0のためフレームワークにもよるかもですがDBの削除フラグのようなクライアントサイドに絡まない値は0,1で管理したほうが良いかも
|
null | 1 | 2 | '' | '1' | '2' | true | false |
null | 1 |
|
|
1 |
|
|
|
1 |
1 | |
1 |
|
|
1 |
|
1 |
|
2 | |
|
1 |
|
|
1 |
1 |
|
'' | 1 |
|
|
1 |
|
|
|
1 |
'1' | |
1 |
|
|
1 |
|
1 |
|
'2' | |
|
1 |
|
|
1 |
1 |
|
true | |
1 |
1 |
|
1 |
1 |
1 |
|
false | 1 |
|
|
1 |
|
|
|
1 |
- PHPで===で比較を行ったときの結果をまとめる
- ==で真になってしまっていた0とnull、0と空文字、0と'0'が違うものとして判定される
- 厳密なチェックを行う必要があるときはこれ
|
null | 0 | 1 | '' | '0' | '1' | true | false |
null | 1 |
|
|
|
|
|
|
|
0 | |
1 |
|
|
|
|
|
|
1 | |
|
1 |
|
|
|
|
|
'' | |
|
|
1 |
|
|
|
|
'0' | |
|
|
|
1 |
|
|
|
'1' | |
|
|
|
|
1 |
|
|
true | |
|
|
|
|
|
1 |
|
false | |
|
|
|
|
|
|
1 |