これら 2 つのステートメントは同じように実行され$thing
ますか?
if (!empty($thing)) {
// do stuff
}
if ($thing) {
// do stuff
}
私はそれを試すことができることを知っていますが、すべてのエッジケースをキャッチできるかどうかはわかりません...いくつかの状況では同じように実行されるのではないかと心配していますが、すべてではありません.
これら 2 つのステートメントは同じように実行され$thing
ますか?
if (!empty($thing)) {
// do stuff
}
if ($thing) {
// do stuff
}
私はそれを試すことができることを知っていますが、すべてのエッジケースをキャッチできるかどうかはわかりません...いくつかの状況では同じように実行されるのではないかと心配していますが、すべてではありません.
$thing
が未定義の場合if ($thing)
、(致命的ではない)エラーをスローし、if (!empty($thing))
falseを返します。
PHPドキュメントのempty()を参照してください。
if (empty($foo))
は の否定形であり、型比較表if ($foo)
で簡単に確認できます。これは、最下位レベルで次のことを意味します。
if (!empty($foo))
論理的には
if ($foo)
ただし、未定義の変数または配列インデックスの場合、if ($foo)
とif ($foo['bar'])
は を発生させますが、 と は発生E_WARNING
させません。if (!empty($foo))
if (!empty($foo['bar']))
その趣旨で、変数またはインデックスが存在しない可能性がある場合 ( withまたはなど) は、 empty
andを優先する必要があります。変数またはインデックスが存在する必要がある場合は、バグが原因である可能性が高いため、スローされた警告が追跡されるようにすることをお勧めします。!empty
$_GET
$_POST
$var
!$var
関連するマニュアルページはConverting to booleanで、もちろんempty()です。empty()
これは次のとおりです。
変数が存在しない場合、またはその値が等しい場合、変数は空と見なされます
FALSE
したがって、変数が存在しない状況を除いて、それらは完全に同等です。そしてその場合:
var_dump( empty($not_exists), (bool)$not_exists );
... 我々が得る:
bool(true)
bool(false)
... (対応する の中でnotice
) 理由:
次の値が考慮され
FALSE
ます: [...] 設定されていない変数
empty は、場合によってはひどく爆発する可能性があります。その最大のものは0
値です
php > $x = 0;
php > var_dump(empty($x));
bool(true)
php > $x = false;
php > var_dump(empty($x));
bool(true);
0/false 値を渡す必要がない限り、 empty() はうまく機能します。
マニュアルによると、いくつかの違いがあります。たとえば、次のとおりです。
$object = new stdclass;
if ($object) {} // false in PHP 4, true in PHP 5+
また、変数のみを に渡すことができますempty
。これはエラーをスローします。
if (empty(time()) {}
// Fatal error: Can't use function return value in write context
if (time()) {} // OK
そしてもちろん、if ($var)
初期化されていない変数では通知が生成されます。
if ($var)
暗黙のブール変換です。詳しくはマニュアルをご覧ください。
http://php.net/manual/en/language.types.boolean.php
ブール値に変換する場合、次の値は FALSE と見なされます。
- ブール値の FALSE 自体
- 整数 0 (ゼロ)
- float 0.0 (ゼロ)
- 空の文字列、および文字列 "0"
- 要素がゼロの配列
- メンバー変数がゼロのオブジェクト (PHP 4 のみ)
- 特別な型 NULL (未設定の変数を含む)
- 空のタグから作成された SimpleXML オブジェクト
他のすべての値は TRUE と見なされます (すべてのリソースを含む)。
比較するempty
http://php.net/manual/en/function.empty.php
次のものは空と見なされます。
- "" (空の文字列)
- 0 (整数としての 0)
- 0.0 (浮動小数点として 0)
- "0" (文字列としての 0)
- ヌル
- 間違い
- array() (空の配列)
- $var; (変数は宣言されていますが、値はありません)
したがって、基本的には同じですが、いくつかの非常に微妙な違いがあります。どちらも慎重に使用し、可能な場合は型チェックを行ってください。