PHPのNULLについてのまとめ!判定や空文字との違いなど

PHP

PHPのNULLについてまとめました。
最初にNULLについて解説していて、その後にNULLついて下記のことを書いています。

・NULLの判定(比較)について
・NULLと空文字の違い
・NULL合体演算子について

PHPのNULLとは?

PHPのNULLは何も値を持っていないことを表します。
例えば、下記のように変数にNULLを代入することができます。

<?php
$number = NULL;
var_dump($number) // NULL

$number変数にNULLを代入しました。
これで$number変数には、何も値が入っていないことになります。

ちなみにNULLは、下記のように大文字・小文字を区別せずに代入することができます。

$number = null; // OK
$number = Null; // OK
$number = nuLL; // OK

未定義の変数にはNULLが代入される

未定義の変数を出力したときには、NULLが代入されています。

<?php
$undefinedValue;
var_dump($undefinedValue); // NULL

$undefinedValue変数には代入していません。
その次の行でvar_dump関数を使って出力していますが、NULLが返されます。

このときには変数自体が定義されてないので、一緒にWarningも出力されます。

$ php nullTest.php
PHP Warning:  Undefined variable $undefinedValue in xxx.php on line 3

Warning: Undefined variable $undefinedValue in xxx.php on line 3
NULL

このように、値が未定義の変数はNULLになります。

NULLを判定(比較)する

NULLを判定するときにはis_null関数を使うか、比較演算子の「===」を使って判定することができます。

is_null関数で判定(比較)する

is_null関数を使って、NULLかどうかを判定することができます。
例えば、下記のように使うことができます。

<?php
$value = null;

if (is_null($value)) {
    echo '$valueはnullです';
}

最初に$value変数にNULLを代入しています。
次の処理で、if文の中でis_null関数を使って、$value変数がNULLなのか判定しています。
is_null関数に渡す引数は、nullかどうか調べたい値です。

結果としてNULLなので、trueが返ってきて「$valueはnullです」が出力されます。
このように、is_null関数の返り値はnullだったときにはtrue、nullでないときにはfalseが返ってきます。

比較演算子で判定する

比較演算子の「===」を使って判定することもできます。
例えば、下記のように使うことができます。

$value = null;

if ($value === null) {
    echo '$valueはnullです';
}

先ほどのプログラムを少し修正して、if文での比較箇所を変えました。
このように「===」を使うことでも、nullかどうかを判定することができます。

比較演算子で同じものを比べる「==」を使うと、空文字やfalseの時もtrueになっています。
そのため、比較演算子で比べる場合には「===」を使いましょう。

どちらを使うと良いのか?

is_null関数の公式ドキュメントのユーザー投稿を確認すると、下記のように書いていました。

Micro optimization isn’t worth it.
You had to do it ten million times to notice a difference, a little more than 2 seconds

$a===NULL; Took: 1.2424390316s
is_null($a); Took: 3.70693397522s

is_null関数の方が遅いようですが、違いに気づくには1000万回実施する必要があったとのこと。
比較演算子には「==」もあり、間違えることがありそうなので、個人的にはis_null関数を使っておく方がいいのかなと思いました。

NULLと空文字は違うのか?

NULLと空文字は違います。
空文字は空の文字が入っているので、出力すると下記のように空文字が出力されます。

var_dump(''); // string(0) ""

一方で、nullの場合には、NULLが出力されます。

var_dump(NULL); // NULL

比較演算子やis_null関数で判定した場合にも、NULLとは違うのでfalseが返ってきます。

var_dump('' === NULL); // bool(false)
var_dump(is_null('')); // bool(false)

空文字を判定(比較)するときには、比較演算子を使って、下記のように比較しましょう。

$value = '';
var_dump($value === ''); // bool(true)

nullも空文字もtrueにしたいときにはempty関数を使うと良いです。
この場合には、他の値もtrue判定することがあるので気をつけてください。(詳細は下記を参照してみてください)
関連:PHPのempty関数の使い方と挙動確認11パターン!

NULL合体演算子について

PHPのNULL合体演算子は変数がNULLだった場合に、演算子の右側の値を返してくれます。

<?php
$value = 'test';

echo $value ?? 'nullです'; // test

上記のコードでは、$value変数がNULLかを判断しています。
NULLの場合は「nullです」が返ってきますが、今回はNULLではないので「test」が出力されます。

詳細は下記にまとめているので、確認してみてください。
関連:PHPのNull合体演算子(”??”)の使い方(気になる7パターンを確認)

コメント

タイトルとURLをコピーしました