はじめに
今回は、null判定について考察していこうと思います。
nullと空文字(“”)が同じ扱いになるか、そうでないのか学習していてわからなくなることがあるのでここでまとめておこうと思います。
それでは、早速見ていきましょう。
null判定
nullか空文字(””)かを判定する条件処理
そもそもどういうふうにnullや空文字(“”)の判定をしていくのかを見ていきましょう。
今回、変数名は$flagとして考えていきます。
- if ( !$flag )
- if ( $flag == “” )
- if ( empty($flag) )
- if ( !isset($flag) ) もしくは if ( is_null($flag) )
- if ( is_null($flag) || $flag === “” )
上記、5つが主なnullチェックのパターンになっています。
これら5つの判定は$flagの値によって結果が異なってきます。状況に応じて使い分ける必要があるので1つずつ順に見ていきましょう。
① if ( !$flag )
// ① $flag = "";
// ② $flag = NULL;
// ③ $flag 未定義
// ④ $flag = true;
// ⑤ $flag = false;
// ⑥ $flag = 1;
// ⑦ $flag = 0;
// ⑧ $flag = -1;
// ゆるやかな比較( ”==” では "true == 1", "false == 0" )
if (!$flag) {
echo "Yes";
} else {
} echo "No";
上記の判定を意訳すると、$flagに値が入っているかどうか?という風に考えることができます。
Yes // ①, ②, ③, ⑤, ⑦
No // ④, ⑥, ⑧
結論 :
” ! ” 判定は、 true , 1, -1 は値として認識される
NULLと空文字(””)は値なしで同じ判定となり、NULLか空文字かの区別はできない
false, 0も値なしの扱いとなる
② if ( $flag == “” )
// ① $flag = "";
// ② $flag = NULL;
// ③ $flag 未定義
// ④ $flag = true;
// ⑤ $flag = false;
// ⑥ $flag = 1;
// ⑦ $flag = 0;
// ⑧ $flag = -1;
// ゆるやかな比較( ”==” では "true == 1", "false == 0" )
if ($flag == "") {
echo "Yes";
} else {
} echo "No";
こちら(“==”)緩やかな比較は、上記①と同じ結果となり、NULLと空文字の区別はできません。
結論 :
$flag == “” 判定は、 true , 1, -1 は値として認識される
NULLと空文字(””)は値なしで同じ判定となり、NULLか空文字かの区別はできない
false, 0も値なしの扱いとなる
ちなみに、
緩やかな比較では、
true == 1, false == 0となり同値の扱いになりますが、
厳密な比較では、
true === 1, false === 0は同値扱いとはなりません(true === 1, false === 0は間違っているという認識で!!!)
true / false と0 / 1 の同値判定は下記の公式ページを参考にしてみて下さい。
③ if ( empty($flag) )
こちらも上記同様の結果となります。説明は省きます。
④ if ( !isset($flag) ) もしくは if ( is_null($flag) )
// ① $flag = "";
// ② $flag = NULL;
// ③ $flag 未定義
// ④ $flag = true;
// ⑤ $flag = false;
// ⑥ $flag = 1;
// ⑦ $flag = 0;
// ⑧ $flag = -1;
// ゆるやかな比較( ”==” では "true == 1", "false == 0" )
if (!isset($flag)) {
echo "Yes";
} else {
} echo "No";
if (is_null($flag)) {
echo "Yes";
} else {
} echo "No";
Yes //②, ③
No // ②, ③以外
if ( !isset($flag) )と if ( is_null($flag) )の判定は同じになります。
これらの判定では、変数がNULLと未定義の場合以外は値として認識される結果となります。空文字も””という値として認識されます。
結論 :
if ( !isset($flag) )と if ( is_null($flag) )の判定はNULL と空文字””を区別できる
⑤ if ( is_null($flag) || $flag === “” )
// ① $flag = "";
// ② $flag = NULL;
// ③ $flag 未定義
// ④ $flag = true;
// ⑤ $flag = false;
// ⑥ $flag = 1;
// ⑦ $flag = 0;
// ⑧ $flag = -1;
// ゆるやかな比較( ”==” では "true == 1", "false == 0" )
if (is_null($flag) || $flag === "") {
echo "Yes";
} else {
} echo "No";
Yes // ①, ②, ③
No // ①, ②, ③以外
結論 :
“” と NULLと未定義は区別されず、if文を通る
上記⑤は、Webページの入力フォームの必須チェックでよく使われる判定になるので覚えておくと便利かもしれません。
最後に
いかがでしたでしょうか。
nullと空文字の判定はややこしいので一度整理しておくと良いかもしれません。
ぜひ今回の記事を通して復習してみて下さい。