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や空文字のことでハマってしまったという人も多いと思いますので、意識して使い分けてみると良いでしょう。
