【PHP】isset/empty/is_nullの違いを早見表でチェック|それぞれの挙動も検証

Web開発

Truthyな値とFalsyな値って何?

isset/empty/is_nullの違いの早見表が欲しい!
それぞれの動作の違いを教えて!

PHPでプログラムを作成中、isset/empty/is_nullがどのような挙動をするのか、ついついド忘れしてしまうことがありませんか?

私はよくありありましたので、早見表とそれぞれの動作の違いをまとめた記事を残しておこうと思います。

記事のポイント
  • isset/empty/is_nullの違いを早見表でチェック
  • isset/empty/is_null、それぞれの挙動の違いを検証
  • Truthyな値とFalsyな値について解説

isset/empty/is_nullの早見表

それぞれの値がtrueなのかfalseなのか、表でまとめてあり見やすいものがあったので引用させていただきました。

issetemptyis_null
$value = 1truefalsefalse
$value = “”truetruefalse
$value = “0”truetruefalse
$value = 0truetruefalse
$value = NULLfalsetruetrue
$valuefalsetruetrue
$value = array()truetruefalse
$value = array(1)truefalsefalse
値の複数チェック××
コールバック関数で使用××

引用させていただいた記事は下記の記事です。

isset/empty/is_nullを検証

issetの特徴と挙動

特徴

  • 変数が未定義の場合でもエラーを出さずにNULLの確認ができます。
  • 変数のみを引数として受け取ります。つまり、関数の返り値や値リテラルを直接渡すことは不可能となります。必ず一時的に変数に代入する必要があります。
  • 複数の変数を同時にチェックすることができます。

挙動

$value = 1 true

$value = 1;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = “” true

$value = "";
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = “0” true

$value = "0";
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = 0 true

$value = 0;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = NULL false

$value = NULL;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// false

$value false

$value;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// false

$value = array() true

$value = array();
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = array(1) true

$value = array(1);
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

✅値の複数チェック 全てがtrueだったら処理開始

$a = "";
$b = "";
$c = "";

if (isset($a, $b, $c)){
  echo '全てtrueだよ';
}

emptyの特徴と挙動

特徴

  • 変数が未定義の場合でもエラーを出さずに空値の確認ができます。
  • issetとは異なり、PHP5.5以降では関数の返り値や値リテラルを直接渡すことが出来ます。但し、PHP5.4以前では変数のみを引数として受け取ります。
  • issetとは異なり、複数を同時にチェックすることは出来ません。
  • 配列キーやオブジェクトプロパティに対しても使用することができ、その場合は再帰的に未定義チェックを行ってくれます。一階層ずつチェックする必要がなくなります。

挙動

$value = 1 false

$value = 1;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// false

$value = “” true

$value = "";
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = “0” true

$value = "0";
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = 0 true

$value = 0;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = NULL true

$value = NULL;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value true

$value;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = array() true

$value = array();
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = array(1) false

$value = array(1);
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// false

is_nullの特徴と挙動

特徴

  • 値がセットされていない時とNULLがセットされている時のみtrueになります。
  • コールバック関数としても使用できます。

挙動

$value = 1 false

$value = 1;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// false

$value = “” false

$value = "";
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = “0” false

$value = "0";
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = 0 false

$value = 0;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = NULL true

$value = NULL;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value true

$value;
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = array() false

$value = array();
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// true

$value = array(1) false

$value = array(1);
if (isset($value)){
  echo 'true';
} else {
  echo 'false';
}

// false

✅コールバック関数での使用(NULLの数をカウントして返り値は「1」になります)

$array = array('a','b','c', NULL);

$num_of_null = count(array_filter($array, 'is_null'));
echo $num_of_null;

// 1

まとめ

今回は、isset/empty/is_nullの挙動について検証しました。

それぞれの検証結果をもとに、どれを使っていくかバグの起こらないものをプログラムごとに選択していく必要があると感じました。

特にemptyの使用については、0の扱いに癖があるのでなるべく使用は控えようと思う。

本記事を作成するにあたり、下記の2つの記事を参考にさせていただき、一部引用させていただきました。

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