🦔

PHPで if (isset($x) && !empty($x)) の値チェック

2022/03/04に公開

isset と !empty を併用する必要あるか...?

時々、PHPのソースコードを見ていると値存在チェックにて以下のような判定を見かけます。

if (isset($x) && !empty($x)) {
  // some process..
}

この場合のissetは要るのかいつも疑問に思っていました。

empty だけで十分

上記の場合issetは不要のようです。以下で問題ないみたいです。

if (!empty($x)) {
  // some process..
}

詳細

以下 PHP Manual より

xが定義されていない状態で単に if (x)とするとE_NOTICE レベルのエラーが発生します。代わりに、empty()や isset()を使うか、あるいは変数を初期化するように してください。

また、empty() は本質的に
!isset($x) || $x == false と同じことを簡潔に記述しているだけ
です。

つまり、$xが未定義でもnoticeエラーは発生しないので、display_errorsの設定を下げていても判定処理は意図したとおりに行ってくれます。

Refarence

・PHP 型の比較表
https://www.php.net/manual/ja/types.comparisons.php
・PHPでif (isset(hoge) && !empty(hoge)) しないといけないパターンとは?
https://teratail.com/questions/12397

Discussion