はじめに
PHPにおけるnullの処理方法についてまとめたいと思います。
動機として、PHPには意外とnullを判定する方法が多く存在しているのですが、
落とし穴も多く、それぞれの方法をまとめ、使い分ける必要があるのではないかと考えました。
実務ではないのですが、PHPの開発でエラーが解決できずにハマってしまいました。
対象者
- 駆け出しエンジニア
- 入社1年半くらいまでのPHPer
- エンジニアではないが、PHPを最近始めた
かなり基本的なことで、公式のドキュメントに書かれていることをまとめたものになります。
ある程度経験のある人には、あまり面白い内容ではないと思われます。
本題
null判定方法一覧
-
isset()
を使う -
empty()
を使う -
is_null()
を使う $variable === null
上記が挙げられると思います。
他にもこんな方法でnull
を判定できるよ!という方法があれば教えていただきたいです。
isset()を使う
isset()
は変数が定義されており、値がnull
でないことを確認します。
そのため空文字が含まれている場合にはtrue
になります。
$var = '';
isset($var); // TRUE
$var = "test";
isset($var); // TRUE
unset($var);
isset($var); // FALSE
$var = null;
isset($var); // FALSE
注意点として変数でしか使えないという点があります。
そのためたとえば下記のようにある値を返す関数をisset()
を使用してチェックするとエラーになります。
function returnNull()
{
return null;
}
isset(returnNull()) // エラー
empty()を使う
empty()
は変数が空であるかどうかを検査します。
これはつまりnull
だけでなく、変数がfalse
とみなされる場合にも空だと判定されます。
$var = '';
empty($var); // TRUE
$var = 0;
empty($var); // TRUE
$var = 'test';
empty($var); // FALSE
$var = null;
empty($var); // TRUE
isset()
と違い、厳密なnull
以外もtrue
として通してしまうため、
注意が必要です。(というよりアンチパターンにしているPJもあるかもしれません。)
is_null()を使う
is_null()
はisset()
と逆の働きをします。
つまり値がnull
の時にtrue
と見做され、それ以外はfalse
になります。
$var = '';
is_null($var); // FALSE
$var = 0;
is_null($var); // FALSE
$var = 'test';
is_null($var); // FALSE
$var = null;
is_null($var); // TRUE
unset($var);
is_null($var); // TRUE
$variable === null
最後に紹介する方法は最も原始的な方法だと思います。
ずばり値がnull
かどうかを直接チェックするというものです。
この方法のメリットは変数だけでなく、関数の戻り値もチェックすることができます。
先に紹介した方法は変数が定義されていることを前提としているため、関数を渡すとエラーになります。
この方法を使うことで関数の戻り値もチェックできます。
$var = '';
$var === null; // FALSE
$var = 0;
$var === null; // FALSE
$var = 'test';
$var === null; // FALSE
$var = null;
$var === null; // TRUE
returnNull() === null // TRUE
まとめ
基本的にはisset()
やis_null()
を使用して、関数の戻り値で分岐したい場合はreturnNull() === null
を使うという使い分け方でいいのかな?と思いました。