【问题标题】:What is the difference between if ($check), if (!$check) and if (!!$check) in PHP? [duplicate]PHP 中的 if ($check)、if (!$check) 和 if (!!$check) 有什么区别? [复制]
【发布时间】:2019-11-20 17:29:41
【问题描述】:

有什么区别

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

为什么?

【问题讨论】:

  • 可以通过调试发现不同之处:
  • 我明白了,伙计们,他可以从调试中找到答案,也许他应该(学习!)但这并没有为以后的其他人记录差异。了解这 3 种变体之间的差异以供参考可能具有指导意义。我认为他有一个有效的问题,答案将在以后对其他人有所帮助。如果 OP 确实想通了,我想提醒他,他可以在下面回答他自己的问题。

标签: php if-statement conditional-statements


【解决方案1】:

最后,两个

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),这只是应用了一次的非运算符,它将反转它并转换为布尔值(因此任何“假”值都变为真,任何“真”值变为假)。

【讨论】:

    猜你喜欢
    • 2022-12-26
    • 1970-01-01
    • 2022-12-27
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2022-12-19
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多