PHP中的if($ check),if(!$ check)和if(!! $ check)有什么区别?

时间:2019-07-11 04:34:33

标签: php if-statement conditional-statements

两者之间有什么区别

if ($check)
if (!$check)
if (!!$check) 

为什么?

1 个答案:

答案 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)。