5

これら 2 つのステートメントは同じように実行され$thingますか?

if (!empty($thing)) {
    // do stuff
}

if ($thing) {
    // do stuff
}

私はそれを試すことができることを知っていますが、すべてのエッジケースをキャッチできるかどうかはわかりません...いくつかの状況では同じように実行されるのではないかと心配していますが、すべてではありません.

4

5 に答える 5

4

$thingが未定義の場合if ($thing)、(致命的ではない)エラーをスローし、if (!empty($thing))falseを返します。

PHPドキュメントのempty()を参照してください。

于 2012-11-21T16:55:46.050 に答える
2

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またはなど) は、 emptyandを優先する必要があります。変数またはインデックス存在する必要がある場合は、バグが原因である可能性が高いため、スローされた警告が追跡されるようにすることをお勧めします。!empty$_GET$_POST$var!$var

于 2012-11-21T17:02:29.800 に答える
2

関連するマニュアルページはConverting to booleanで、もちろんempty()です。empty()これは次のとおりです。

変数が存在しない場合、またはその値が等しい場合、変数は空と見なされますFALSE

したがって、変数が存在しない状況を除いて、それらは完全に同等です。そしてその場合:

var_dump( empty($not_exists), (bool)$not_exists );

... 我々が得る:

bool(true)
bool(false)

... (対応する の中でnotice) 理由:

次の値が考慮されFALSEます: [...] 設定されていない変数

于 2012-11-21T17:04:19.263 に答える
0

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() はうまく機能します。

于 2012-11-21T17:11:13.403 に答える
0

マニュアルによると、いくつかの違いがあります。たとえば、次のとおりです。

$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; (変数は宣言されていますが、値はありません)

したがって、基本的には同じですが、いくつかの非常に微妙な違いがあります。どちらも慎重に使用し、可能な場合は型チェックを行ってください。

于 2012-11-21T17:11:03.060 に答える