两者之间有什么区别
if ($check)
if (!$check)
if (!!$check)
为什么?
答案 0 :(得分:1)
最后,两个
if ($check)
和
if (!!$check)
最后检查$cond
是否为真实值。
您可能知道,!
运算符是not
运算符。因此!true
成为false
。当您执行!false
时,它就成为事实!在进行!!
时(这是两次施加非操作符的操作,仅此而已),请像!(!true)
那样思考,它最终返回为true(“ not not true”)。
对于布尔值来说这是微不足道的,但是其他值呢?在PHP中,您可以将任何值作为if
语句的条件。有很多值是“真实的”,这意味着如果置于条件中,它们将导致true
。那到底发生了什么?
在这里,我们将非运算符!
两次应用于不同的值,以查看得到的结果。
# Test // Description -- result
# -----------------------------------------------------------------
var_dump(!![]); // Empty array -- boolean false
var_dump(!![48]); // Non-empty array -- boolean true
var_dump(!!0); // Zero -- boolean false
var_dump(!!38); // Non-zero -- boolean true
var_dump(!!""); // Empty string -- boolean false
var_dump(!!"foo"); // Non-empty string -- boolean true
var_dump(!!(new stdClass())); // Empty object -- boolean true
var_dump(!!null); // null -- boolean false
从以上结果中可以看出,它将值转换为布尔值,其作用与
相同if ((bool)$check)
最后,执行if ((bool)$check)
,if (!!$check)
或if ($check)
都会得到相同的结果-条件为真值是正确的。差异最终是在哪里评估的。两者首先发送布尔值作为条件,最后两个发送值本身并检查条件中的真值。
对于if (!$check)
,这只是一次应用了非运算符,它会将其反转并转换为布尔值(因此,任何“虚假”值变为true,而任何“真实”值变为false)。