NULLと空の判定

2012.06.22

こんばんは、アーキテクトの小山です。

今回はNULLのお話です。

NULLとは、何も無いという意味でプログラミング言語で広く使われています。

PHPでは、値を持たない変数のことをNULL型とすると定義付けされています

空の値を持つ変数や0とどう違うのか、自分自身曖昧な部分もあったのでここで整理します。

まず、確かめるための変数を用意します。

$a = 0;//整数
$b = ’0′;//文字列
$c = false;//論理型
$d = ”;//文字列
$e = null;//NULL型
$f;//NULL型

この6つの変数を各判別方法で確かめます。

①empty関数

empty関数は、変数が空であるかを検査します。

結果:

true

true

true

true

true

true

全てTRUEを返されました。文字列の0であっても空と判別されます。

②isset関数

isset関数は、変数がセットされており、尚且つNULLではないことを検査します。

結果:

true

true

true

true

false

false

$e(NULLを明示的に格納した変数)と、$f(値を入れていない変数)がfalse判定されました。

$dはシングルクォーテーションで文字列の空を値として代入しているのでtrueになります。

③is_null関数

is_null関数は変数に格納されている値がNULLであるか検査します。

結果:

false

false

false

false

true

true

結果は言わずもがな。変数を宣言するだけだと、NULLが値に入った状態となります。

④if($hoge == ”) 比較演算子『==』で『”』と比べた場合

『==』は、左右の値が等しいかを確かめる演算子です。この演算子はデータ型を比較しません。

結果:

true

false

true

true

true

true

$aは整数の0ですが、空と判別されました。しかし、$bは文字列の0として代入されているため空ではないと判別されました。

$cはfalseが代入されていますが、空であると判別されます。

④if($hoge === ”) 比較演算子『===』で『”』と比べた場合

『===』は、左右の値が等しいかを確かめ、尚且つデータ型も比較します。

結果:

false

false

false

true

false

false

これはそのままです。『”』を代入すると文字列になるので、$dのみがtrueを返します。

⑤if($hoge)で比較する

if文で判別させるとどうなるのでしょうか。

結果:

false

false

false

false

false

false

全てfalseが返ってきました。

emptyと同じ判別方法かと思いがちですが、判別方法は厳密には違います。

empty()は、変数が設定されていないときに警告が生成 されないことを除けば、(boolean) var の逆です

php.netより引用

どうやら微妙に違うようです。

こういった関数や比較演算子での結果を完全に把握していれば良いのですが、if文で変数を判断させるならempty,isset,is_null関数で判別させた方が思わぬトラブルは避けられそうです。

ちなみに、NULLはヌルと呼ばれることが殆どですが、実はナルと呼称するのが正しいようです。

lab-php5

一覧へ