LoginSignup
5
7

More than 1 year has passed since last update.

PHPでnull判定関数(isset, empty, is_null)の違い

Posted at

はじめに

実務で「変数に配列がセットされてるけど、空配列であることを判定」する必要がありました。
PHPでは配列の空判定が出来る関数としてisset, empty, is_nullがありますが、違いがよくわからずに苦労しました。
理解を深めるために違いをまとめたので記事にしました!

対象者

この記事は下記のような人を対象にしています。

  • 駆け出しエンジニア
  • プログラミング初学者
  • null?空文字?なにそれ美味しいの?な人
  • isset, empty, is_null...聞いたことあるけど、全部同じじゃないの?と思ってる人

PHPのnull判定関数(isset, empty, is_null)の違い早見表

まずは結論から。

if($var) isset empty is_null
1 $var=1 true true false false
2 $var=""; false true true false
3 $var="0"; false true true false
4 $var=0; false true true false
5 $var=NULL; false false true true
6 $var false false true true
7 $var=array() false true true false
8 $var=array(1) true true false false

以下、それぞれについて解説します。

PHPのisset関数

変数が宣言されていること、そして null とは異なることを検査する

公式ドキュメントより

「変数が宣言されていること」がempty, is_nullと違う点なので注意です。
表5のケースでは変数$varにnullがセットされているのでfalse。
表6のケースでは変数$varは宣言されているものの、値はセットされていないのでfalse。
それ以外のケースでは、空文字/数字の0/空の配列だろうと、nullでないものがセットされてるのでtrueです。

PHPのempty関数

変数が空であるかどうかを検査する

公式ドキュメントより

PHPのempty関数は「空であるかどうか」を判定します。
空文字/数字の0/文字列の0/null/空の配列などがtrueになります。

PHPのis_null関数

変数が null かどうか調べる

公式ドキュメントより

名前の通り、null/何もセットされていない場合にtrueになります。

と、いうことはissetと!is_nullは一緒やんな?→違います

ぱっと見、issetとis_nullは正反対の判定をしているように見えます。
ということはissetと!is_nullどっち使ってもいいはず...と思ったあなた、ダウトです。
issetは「変数が宣言されていること」も判定していますが、is_nullは関係ありません。

test.php
$x = 'test';
var_dump(isset($y));
// 結果(変数$yは宣言されていないのでfalse)
bool(false)

$x = 'test';
var_dump(!is_null($y));
// 結果(そもそも$yが宣言されていないのでundefined)
PHP Notice:  Undefined variable: y in test.php on line 7

おわりに

PHPのnull判定関数(isset, empty, is_null)の違いについてまとめました。
特にissetと!is_nullは素人目には同じように思えましたが、きちんと調べると挙動が違うことが理解できました。

参考記事

PHP isset, empty, is_null の違い早見表

5
7
0

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
5
7