PHPの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パターンを確認)
コメント