2019-07-06

PHPのNULL(ヌル)型を考えてみる

PHPに関する記事

データベースを扱う場合など、デフォルト値に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マニュアル