PHPでnull
判定をするにはis_null()
を使います。
しかしnull
ではなく、空文字や0
などは判定できないため、isset()
やempty()
を使いますね。
そもそもnull
と空文字の違いはなんでしょうか?
そんなnull
や空文字判定、null
と空文字についてご紹介します。
目次
「is_null」でNULL判定する
1 2 3 4 5 |
$name = NULL; if (is_null($name)) { echo 'NULLです!'; } |
NULLです!
以下のようにis_null()
を付けてあげるだけで、null
だったらtrue
を返してくれます。
is_null(null判定の対象の値);
null→TRUE
それ以外→FALSE
以下のように値が格納されていない変数もnull
になります。
1 2 3 4 5 |
$name; if (is_null($name)) { echo 'NULLです!'; } |
NULLです!
しかし空文字や0
はnull
ではないためfalse
となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$name = ''; if (is_null($name)) { echo 'NULLです!'; } else { echo 'NULLじゃありません。'; } $name = 0; if (is_null($name)) { echo 'NULLです!'; } else { echo 'NULLじゃありません。'; } |
上記2つとも以下のようになります。
NULLじゃありません。
「empty」で0や空文字判定
1 2 3 4 5 6 7 8 9 10 11 |
$name = ''; if (empty($name)) { echo '空です!'; } $name = 0; if (empty($name)) { echo '空です!'; } |
空です!
empty()
を使えば、空文字や0
もtrue
を返します。
empty(対象の値);
”(空文字)、0、’0’、NULL、FALSE、array()、$name;(値のない変数)→TRUE
それ以外→FALSE
emptyと否定の「!」(エクスクラメーション・マーク)は同じ動作
empty()
を使わずに、!
(エクスクラメーション・マーク)を使っても同様に動作します。
1 2 3 4 5 |
$name = ''; if (!$name) { echo '空です!'; } |
空です!
簡単に判定できますね。
ただ、変数に0
を格納しても「空です!」と怒られてしまうので、プログラム上不都合な場合は、empty()
は使わないようにしましょう。
「isset」でNULLと変数がセットされたかを判定
isset()
もnull
の判定をするので、併せてご紹介します。
isset()
は変数がセットされており、null
じゃない場合にtrue
を返します。
1 2 3 4 5 6 7 8 9 10 11 |
$name = ''; if (isset($name)) { echo '変数セットOK!'; } $name = 0; if (isset($name)) { echo '変数セットOK!'; } |
変数セットOK!
以上のように、空文字でも0でも「セットされていますよ!」と判定されます。
isset(対象の値);
NULL、$name;(値のない変数)→FALSE
それ以外(”(空文字)、0、’0’、FALSE、array()…など)→TRUE
最初にご紹介したis_null()
と逆の判定となります。
空文字とNULLの違いは?
そもそも空文字とnull
の違いはなんでしょうか?
私も最近まで意識していませんでしたが、いろいろ調べてみると以下のようなことかなと思うようになりました。
- 空文字 → 存在はしてるが中身は空っぽ
- NULL → 存在すらしていない
引用の引用になって申し訳ないですが、以下のサイトでこういう文言を見つけました。
「ガソリンタンクを持っていない車と、空のガソリンタンク」は、概念的に異なるものです。
出典:NULL撲滅委員会
オブジェクト指向にインスタンスというものがありますが、クラスという設計図をインスタンス化(実体化)するというもので、以下のようにも説明できるかと思います。
- 空文字 → インスタンス化されているが、中身は空っぽ
- null → インスタンス化すらされていない
データベースと連携したプログラムを書くときなど、null
や空文字のことでハマってしまったという人も多いと思いますので、意識して使い分けてみると良いでしょう。