PHPの「0」はempty関数では空になる挙動と使い方について解説

emptyは、PHPで変数が空かどうかを判定するための便利な関数です。

この関数は主に条件分岐やバリデーション処理で利用されます。この記事では、empty関数の正確な挙動と使い方について解説します。

empty関数の挙動

empty関数は以下の場合に true を返却する挙動をします。

  1. 変数が未定義
  2. null
  3. 空文字 ""
  4. 数値の0
  5. 文字列の0
  6. 論理値 false の場合
  7. 空の配列

コードに直すと以下になります。

empty($undefined); // true
empty(null); // true
empty(""); // true
empty(0); // true
empty("0"); // true
empty(false); // true
empty(array()); // true

特筆すべき所としては変数が未定義である場合と、0の場合にはemptytrueを返却します。

公式のドキュメントには以下の記述があるのがわかりやすいかと思います。

変数が存在しなくても警告は発生しません。 つまり、empty() は本質的に !isset($var) || $var == false と同じことを簡潔に記述しているだけです。

https://www.php.net/manual/ja/function.empty.php

厳密にチェックをしたい場合

emptyの挙動について解説してきました。

便利な反面、割と曖昧な部分が多いためチェック漏れが発生してしまう場合が存在します。

厳密にチェックする場合では empty である事を確認するのではなく、「0である」などの期待する値を厳密にして確認する必要があります。

$value = 0;

$value === 0; // 厳密な比較演算子 === を使用
gettype($value) === 'integer'; // 型を比較
isset($value) && $value === null; // 変数が宣言済みで null を期待する

emptyの挙動では厳密な比較演算子が使われていないため、比較演算子を自分で記述する事で厳密なチェックが可能になります。

終わりに

empty関数は、PHPプログラミングにおいて変数の空判定を簡潔に行うための便利な関数です。

ですが曖昧な部分が存在しているため、厳密な比較が必要な場合には厳密な比較演算子 === を使用することが推奨されます。

変数の状態に応じて適切な条件分岐を行い、アプリケーションロジックをスムーズに制御していきましょう。

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA