2011-08-22 9 views
12

私は以下の2つのケースの違いは何か、そしてどちらがお勧めですか?

$val = 0; 

if (!$val) { 
    //True 
} 

if (empty($val) { 
    //It's also True 
} 

答えて

21

PHP type comparison tableをご覧ください。

テーブルを確認すると、すべてのケースについて、empty($x)!$xと同じになります。したがって、初期化されていない変数を処理することになります。 !$xE_NOTICEを作成しますが、empty($x)は作成しません。

+0

+1。これは '!= [ブール値$ valの評価結果]'と同じであることに注意してください。最初の表の最後の列はほとんどあなたが見ているべきものです。 – rockerest

+0

+1比較表でニースを見つける。 –

+0

ありがとう、それは私が知る必要があったものです。だから私は空($ x)がより安全なアプローチだと思います。私は違いが無視できるパフォーマンス賢明な権利だと思いますか? – Bachx

4

空を使用し、変数が設定/作成されなかった場合、警告/エラーはスローされません。

3

見てみましょう:

empty documentation:

次のものがemptyと考えられている:

  • ""(空の文字列)
  • 0(整数として0
  • 0.0(floatとして0
  • "0"(文字列として0
  • NULL
  • FALSE
  • array()(空の配列)
  • var $var;(変数が宣言されたが、Aの値無しクラス)

Booleans documentation:ブール値に変換する場合、以下の値がFALSEと考えられる

  • ブールFALSE自体は
  • 整数0(ゼロ)
  • フロート0.0(ゼロ)
  • 空文字列、および文字列"0"
  • ゼロ要素
  • ゼロメンバ変数を持つオブジェクトの配列(PHP 4のみ)
  • 空のタグから作成NULL
  • SimpleXMLオブジェクト(未設定変数を含む)特殊なタイプ

結果の値に関する唯一の違いは、SimpleXMLインスタンスがどのように処理されるかです。他のすべてが同じ結果を返すように見えます(もちろんブール値のキャストを逆にすると)。

+0

結論はなんですか?リストから、ブール値はより堅牢なチェックのようです... –

+0

これは間違っています。 PHPシェルでの簡単なテストでは、空の 'SimpleXMLElement'インスタンスは'! 'と同じように処理されます。 '空の'文書の中には、それらがそこに言及されていないという単純な誤りです。 –