让我与大家分享一些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)
???相同的结果我的意思是,这是我们所期望的,不是吗?
曾经交替使用这两种方式,但现在我只使用!==
虽然我仍然不知道为什么另一种形式不起作用......
!$var1
是TRUE
,$var2
是0
。
它们不相等,所以结果是 false
.
也许你对!($var1 === $var2)
感到困惑
最后一条语句的计算结果为:
(!$var1) === $var2
由于$var1
是一个假值(空字符串),反转它会给你一个真值(1
),它不等于(当然也不等同0
!因此,比较是false
.
(请注意,我在这里故意使用术语"真实"和"虚假",因为''
和0
不太true
和false
。
这是一个优先级问题:
not 运算符首先应用于$var1
并生成布尔值 true。布尔值 true 不精确等于 int 0,因此它的计算结果为 false。