私は以下の2つのケースの違いは何か、そしてどちらがお勧めですか?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
私は以下の2つのケースの違いは何か、そしてどちらがお勧めですか?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
PHP type comparison tableをご覧ください。
テーブルを確認すると、すべてのケースについて、empty($x)
は!$x
と同じになります。したがって、初期化されていない変数を処理することになります。 !$x
はE_NOTICE
を作成しますが、empty($x)
は作成しません。
空を使用し、変数が設定/作成されなかった場合、警告/エラーはスローされません。
見てみましょう:
次のものが
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
インスタンスがどのように処理されるかです。他のすべてが同じ結果を返すように見えます(もちろんブール値のキャストを逆にすると)。
結論はなんですか?リストから、ブール値はより堅牢なチェックのようです... –
これは間違っています。 PHPシェルでの簡単なテストでは、空の 'SimpleXMLElement'インスタンスは'! 'と同じように処理されます。 '空の'文書の中には、それらがそこに言及されていないという単純な誤りです。 –
+1。これは '!= [ブール値$ valの評価結果]'と同じであることに注意してください。最初の表の最後の列はほとんどあなたが見ているべきものです。 – rockerest
+1比較表でニースを見つける。 –
ありがとう、それは私が知る必要があったものです。だから私は空($ x)がより安全なアプローチだと思います。私は違いが無視できるパフォーマンス賢明な権利だと思いますか? – Bachx