こんにちは、@Manabu です。
PHPでよく使う関数の一つが、empty関数です。
こちらについて、改めて詳しくどんなものかまとめてみました。
どういった判定をしたい時に使用するのか、再度考えてみましょう。
empty関数とは?
empty関数は、変数が「空」であるかどうかを確認するために使用されるPHPの関数です。
PHPでは、以下の条件のいずれかを満たす場合、変数は「空」とみなされ true を返します。
- 変数が null である
- 変数が false である
- 変数が空の文字列(” “)である
- 変数が空の配列([ ])である
- 変数が整数もしくは文字列の 0 である
ユーザー入力の検証や、変数に値が存在するかどうかを確認する際に役立ちます。
isset、is_nullとの違い
emptyと同じように、変数の状態を確認する関数に、isset関数とis_null関数があります。
それぞれ、以下のような条件でtrueを返します。
isset関数
isset関数は、変数が設定されていて、かつnullではないかどうかを確認し、条件をクリアしている場合に true を返します。
変数がnullや0であっても、設定されていれば trueを返すようになります。
is_null関数
is_null関数は、名前の通り、変数の値がnullの場合 true を返します。
それぞれの使用パターンの早見表が、以下の記事に載っているので参考にしてください。
よくある落とし穴
empty関数を使用する時に、発生する可能性のあるミスについて紹介します。
誤検出
empty()は、0や“0”、false、nullに対してtrueを返すため、0や“0”を有効な値として扱いたい場合に予期しない結果を生むことがあります。
$value = 0;
if (empty($value)) {
echo "値は空です"; // これはtrueになります
}
初期化していない変数
empty()は未設定の変数に対してもtrueを返します。
これは便利ですが、予期しない場合に混乱を招くことがあります。
おすすめの使い方
empty()は、特にフォーム検証や条件分岐で、任意の「falsy」値をチェックする際に使用します。
nullとその他の空の値を区別したい場合は、isset()とempty()を組み合わせて使用することが有効です。
まとめ
empty()関数は、変数が「空」であるかどうかをチェックする便利なツールですが、0や“0”も空とみなすため、誤って処理されることがあります。
このような場合は、!isset()を使って変数が未設定またはnullであるかどうかを確認し、さらに具体的な条件(例: === 0)を追加することで、予期しない結果を防げます。
empty()と!isset()を状況に応じて使い分けることで、より堅牢なコードが書けるようになります。