PHP使用'!!'转换为布尔值

时间:2012-10-03 23:00:05

标签: php boolean

这里有一个相当直截了当的问题。正在查看一些代码,我已经看到了一个似乎将给定变量转换为布尔值的函数。它是这样的:

function to_bool( $var ) {
    return !!$var;
}

很简单,但它是如何工作的?从来没有见过这个,谷歌搜索并没有真正让我到任何地方。额外的'!'翻转结果? '!$ var'可用于检查var是否为false,'!!'也是如此将'false'变为true,反之亦然?

5 个答案:

答案 0 :(得分:9)

  

它是如何运作的?

not运算符将变量放入条件中。因此,结果是布尔值。第二个没有翻转它的价值。

更明确的是在代码中使用显式强制转换而不是这样的函数:

(bool)$var;

答案 1 :(得分:3)

一个!将是一个反向布尔值,因此两个!!构成一个非反向布尔值。它是变量的双重否定,并作为布尔类型返回

答案 2 :(得分:3)

拿!! 2

!2评估为!(true)

评估为!false最终结果true。 not boolean基本上将右操作数视为bool。

答案 3 :(得分:2)

嗯...有趣。

当确定变量是“真”还是“假”时,PHP遵循一组特定的规则。

使用某些运营商将迫使做出决定。例如,当您使用"a"运算符添加字符串2和整数.时,您将获得"a2",因为.运算符的意图是连接。

这里,第一个!表示你试图否定变量。否定任何东西意味着你必须首先将它视为布尔值,这就是它的作用。然后第二个!只是否定了它。

这是一种奇怪的方式。坦率地说,if ($var)会产生与if (to_bool($var))相同的结果。

答案 4 :(得分:0)

您也可以从类型转换的角度来看这件事。在PHP中,对值执行逻辑表达式将得到布尔结果。因此,第一个否定隐式将值强制转换为布尔值,而第二个求反只是将第一个否定的取反。您可以使用其他逻辑运算符执行相同的操作(尽管我不建议这样做,因为某些运算符具有不同的优先级):

// using "truthy" 2 as a value //

!!2          // true 
2 ||  false  // true
2 &&  true   // true
2 xor false  // true

// using "falsey" 0 as a value //

!!0         // false
0 ||  false // false
0 &&  true  // false
0 xor false // false