2019-07-06
PHPのNULL(ヌル)型を考えてみる
データベースを扱う場合など、デフォルト値にNULLを指定することがあります。
ふとNULLと空白の違いはなんだろう、と思い考察しました。
NULL型とは
NULL値は、ある変数が値を持たないことを表す特別な値です。NULLは「定数」で、null型の唯一の値です。変数は、以下の場合にNULLとみなされます。ヌルと読みます。
- 定数 NULL が代入されている場合
- まだ値が何も代入されていない場合
- unset() されている場合
構文
NULL型の値は一つだけで、大文字小文字を区別しない定数NULLです。
<?php
$var = NULL;
?>
サンプルコード
NULLと""
(空白)は異なる値ですが、比較演算子==
で比較すると等しいと判断されTRUEが返されます。しかし型が異なるため、厳密な判定===
で比較するとFALSEとなります。
変数の値がNULLかどうか判定するに、is_null()
関数を使います。値の有無を調べるisset()
関数ではFALSEが返ります。通常の変数の値を判別する方法とは多少動作が異なりますので、注意が必要です。
<?php
$foo = NULL;
$bar = "";
echo '$foo:' . $foo . '<br>'; // 何も表示されない
echo '$bar:' . $bar . '<br>'; // 何も表示されない
echo '--------------------'
if ($foo == $bar) {
echo '$fooと$barは等しい(==)' . '<br>';
} else {
echo '$fooと$barは等しくない(==)' . '<br>';
}
echo '--------------------'
if ($foo === $bar) {
echo '$fooと$barは等しい(===)' . '<br>';
} else {
echo '$fooと$barは等しくない(===)' . '<br>';
}
echo '--------------------'
if (is_null($foo)) {
echo '$fooはNULLです' . '<br>';
} else {
echo '$fooはNULLではありません' . '<br>';
}
echo '--------------------'
if (isset($foo)) {
echo '$fooは定義されています' . '<br>';
} else {
echo '$fooは定義されていません' . '<br>';
}
以下のように出力されます。
$foo:
$bar:
--------------------
$fooと$barは等しい(==)
--------------------
$fooと$barは等しくない(===)
--------------------
$fooはNULLです
--------------------
$fooは定義されていません
参考リンク
NULL – PHPマニュアル