0

PHP コードをいくつか紹介します。

$var1 = '';

$var2 = 0;

echo '<pre>';
var_dump($var1 == $var2); //prints bool(true)
echo '</pre>';

echo '<pre>';
var_dump($var1 != $var2); //prints bool(false)
echo '</pre>';

echo '<pre>';
var_dump(!$var1 == $var2); //prints bool(false)
echo '</pre>';

echo '---<br />';

echo '<pre>';
var_dump($var1 === $var2); //prints bool(false)
echo '</pre>';

echo '<pre>';
var_dump($var1 !== $var2); //prints bool(true)
echo '</pre>';

echo '<pre>';
var_dump(!$var1 === $var2); //prints bool(false) .. WTFF????
echo '</pre>';

質問は...最後のステートメントが???と同じ結果をもたらさ(! $var1 === $var2) ないのはなぜですか? ($var !== $var2)つまり、それは私たちが期待することですよね?

以前は両方の方法を同じ意味で使用していましたが、今は使用するだけ!==ですが、他の形式が機能しない理由はまだわかりません...

4

3 に答える 3

4

!$var1TRUE$var2です0

それらは等しくないので、結果はfalseです。

と混同していたのかもしれません!($var1 === $var2)

于 2012-09-27T18:44:36.663 に答える
1

最後のステートメントは次のように評価されます。

(!$var1) === $var2

は偽の値 (空の文字列) であるため$var1、これを反転すると真の値 ( 1) が得られます0。したがって、比較はfalseです。

(ここでは意図的に「真実」と「虚偽」という用語を使用していることに注意し''てください。0truefalse

于 2012-09-27T18:45:04.447 に答える
0

これは優先順位の問題です:

not 演算子が最初に適用され$var1、結果はブール値の trueになります。また、ブール型の trueはint 0と正確に等しくないため、false と評価されます。

于 2012-09-27T18:46:07.327 に答える