PHPでNULL判定する3パターンとNULLと空文字の違い

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPでnull判定をするにはis_null()を使います。

しかしnullではなく、空文字や0などは判定できないため、isset()empty()を使いますね。

そもそもnullと空文字の違いはなんでしょうか?

そんなnullや空文字判定、nullと空文字についてご紹介します。

 

「is_null」でNULL判定する

NULLです!

以下のようにis_null()を付けてあげるだけで、nullだったらtrueを返してくれます。

is_null(null判定の対象の値);

null→TRUE
それ以外→FALSE

以下のように値が格納されていない変数もnullになります。

NULLです!

しかし空文字や0nullではないためfalseとなります。

上記2つとも以下のようになります。

NULLじゃありません。

「empty」で0や空文字判定

空です!

empty()を使えば、空文字や0trueを返します。

empty(対象の値);

”(空文字)、0、’0’、NULL、FALSE、array()、$name;(値のない変数)→TRUE
それ以外→FALSE

emptyと否定の「!」(エクスクラメーション・マーク)は同じ動作

empty()を使わずに、!(エクスクラメーション・マーク)を使っても同様に動作します。

空です!

簡単に判定できますね。

ただ、変数に0を格納しても「空です!」と怒られてしまうので、プログラム上不都合な場合は、empty()は使わないようにしましょう。

「isset」でNULLと変数がセットされたかを判定

isset()nullの判定をするので、併せてご紹介します。

isset()は変数がセットされており、nullじゃない場合にtrueを返します。

変数セットOK!
以上のように、空文字でも0でも「セットされていますよ!」と判定されます。

isset(対象の値);

NULL、$name;(値のない変数)→FALSE
それ以外(”(空文字)、0、’0’、FALSE、array()…など)→TRUE

最初にご紹介したis_null()と逆の判定となります。

空文字とNULLの違いは?

そもそも空文字とnullの違いはなんでしょうか?

私も最近まで意識していませんでしたが、いろいろ調べてみると以下のようなことかなと思うようになりました。

  • 空文字 → 存在はしてるが中身は空っぽ
  • NULL → 存在すらしていない

引用の引用になって申し訳ないですが、以下のサイトでこういう文言を見つけました。

「ガソリンタンクを持っていない車と、空のガソリンタンク」は、概念的に異なるものです。

出典:NULL撲滅委員会

オブジェクト指向にインスタンスというものがありますが、クラスという設計図をインスタンス化(実体化)するというもので、以下のようにも説明できるかと思います。

  • 空文字 → インスタンス化されているが、中身は空っぽ
  • null → インスタンス化すらされていない

データベースと連携したプログラムを書くときなど、nullや空文字のことでハマってしまったという人も多いと思いますので、意識して使い分けてみると良いでしょう。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*