首页 > 解决方案 > PHP 中的 if ($check)、if (!$check) 和 if (!!$check) 有什么区别?

问题描述

和有什么区别

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

为什么?

标签: phpif-statementconditional-statements

解决方案


最后,双方

if ($check)

if (!!$check)

最终检查是否$cond是真实值。

众所周知,!运营商就是not运营商。就这样!true变成了false。当你这样做时!false,它就变成了真的!在做的时候!!(这是两次应用的非运算符,仅此而已),把它想象成!(!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),这只是应用了一次的非运算符,它将反转它并转换为布尔值(因此任何“假”值都变为真,任何“真”值变为假)。


推荐阅读