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$var20

它们不相等,所以结果是false

也许你对!($var1 === $var2)

于 2012-09-27T18:44:36.663 回答
1

最后一条语句被评估为:

(!$var1) === $var2

因为$var1是一个假值(空字符串),反转它会给你一个真值(1),它不等于(当然也不相同!)0。因此,比较是false

(请注意,我在这里故意使用术语“真实”和“虚假”,因为''0不完全是truefalse。)

于 2012-09-27T18:45:04.447 回答
0

这是一个优先事项:

not 运算符首先应用于$var1并产生布尔值 true。并且布尔值 true不完全等于int 0,因此它的计算结果为 false。

于 2012-09-27T18:46:07.327 回答