0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PHP】null処理方法の使い分け(isset、empty、is_null)

Posted at

はじめに

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を使うという使い分け方でいいのかな?と思いました。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?