这里有一个相当直截了当的问题。正在查看一些代码,我已经看到了一个似乎将给定变量转换为布尔值的函数。它是这样的:
function to_bool( $var ) {
return !!$var;
}
很简单,但它是如何工作的?从来没有见过这个,谷歌搜索并没有真正让我到任何地方。额外的'!'翻转结果? '!$ var'可用于检查var是否为false,'!!'也是如此将'false'变为true,反之亦然?
答案 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