4

PHPでは、

null==0
0=="0"

これら 2 つを組み合わせると、次のようになります。

null=="0"

しかし、これは真実ではありません。

誰かが私にこれを説明できますか?

4

3 に答える 3

10

最初のケースでは:

null==0

nullは と評価され、どちらが と評価されるfalseのと同じなので、どちらもと0評価され、比較は を返します。falsefalsetrue

2 番目のケースでは:

0=="0"

ここでは、異なる型の 2 つの変数を比較しています。1 つは数値で、もう 1 つは文字列です。===演算子を使用していないためです。PHP はそれらの 1 つを他の型にキャストし、文字列にキャストされた0は"0"に等しいので、それらはnumber にキャストされる"0"の場合も0にキャストされるため、他の値と同じであるため、この比較は true を返します。

3 番目のケース:

null=="0"

これは同じ状況です。どちらも異なる型であるため、PHP は一方を他方の型にキャストしますが、null を文字列にキャストすると、結果は"0"と等しくない"null"になるため、それが理由ではありませんその比較は本当です。

于 2012-09-18T09:33:43.420 に答える
2

==同等性をチェックします

===等しいAND型をチェックします(「同一」とも言います)

したがって、PHP には強力な型ヒントがないため、最適な型に自動的にキャストされます。

null === 0orは と同様に null 値と見なされるため、 is falsewhilenull == 0は true です。空の値も返されます。0'0'falsenull == ''true

それがPHPの仕組みです。

ベスト プラクティスは、常に===演算子を使用して型をチェックすることです (およびその否定的な同等物!==を使用し、特別な場合にのみ他のものを使用します)。

于 2012-09-18T09:32:51.113 に答える
1

PHP は型付けが厳密ではないため、必要な比較や操作に応じて変数を他の型にキャストすることがよくあることを理解しておく必要があります。null==0 の場合、null と整数 0 の両方が false と見なされることを示しています。

null == "0" の場合、文字列 "0" が空であるかどうかをチェックしています。整数 0 を文字列 "0" 型と比較すると、"0" が int と比較されます。この場合、それらは等しいです。

それが役立つことを願っています。

于 2012-09-18T09:30:11.597 に答える