这里相当直接的问题。一直在查看一些代码,我看到一个函数似乎将给定的变量转换为布尔值。它是这样的:使用'!!'将PHP转换为布尔值
function to_bool($var) {
return !!$var;
}
很简单,但它是如何工作的?从来没有见过这种情况,谷歌搜索并没有真正让我得到任何地方。额外的'!'排序结果? '!$ var'可用于检查var是否为false,'!!'也是如此。将'假'变为真,反之亦然?
这里相当直接的问题。一直在查看一些代码,我看到一个函数似乎将给定的变量转换为布尔值。它是这样的:使用'!!'将PHP转换为布尔值
function to_bool($var) {
return !!$var;
}
很简单,但它是如何工作的?从来没有见过这种情况,谷歌搜索并没有真正让我得到任何地方。额外的'!'排序结果? '!$ var'可用于检查var是否为false,'!!'也是如此。将'假'变为真,反之亦然?
它是如何工作的?
的不操作变量放入一个条件。因此,结果是布尔值。第二个不会翻转它的价值。
它更清楚只是在代码中使用显式的转换,而不是这样的功能:
(bool)$var;
迂腐,它是时间顺序中的第二个“不”,或者是物理顺序中的第一个“不”,即翻转该值。 –
@Seth:对。这就是我的意思。 – webbiedave
一个!
将是一个倒置的布尔于是两个!!
使非反转布尔值。这是一个可变的双重否定,并返回作为布尔类型
取!! 2
!2
评估为!(true)
计算结果为!false
最终结果true
。非布尔值基本上将右操作数视为布尔值。
嗯...有趣。
嗯,PHP进行一系列特定的,当确定变量是否为“真”或“假”的规则。
使用某些运营商将迫使这一决定作出。例如,当您添加一个字符串"a"
和一个整数2
与.
运营商,你会得到"a2"
,因为.
操作者的意图是连接。
在这里,第一!
意味着你试图否定的变量。否定任何事物意味着你必须首先将它视为一个布尔值,所以这就是它的作用。然后第二个!
只是否定它回来。
这是一个奇怪的做法。坦率地说,if ($var)
会产生与您的if (to_bool($var))
相同的结果。
你认为'!! $ var'是检查'to_bool($ var)'的更快方法吗?真是出于好奇!显然,如果有的话,可以忽略不计! –
'if($ var)'是最快的,但是,差异可以忽略不计。 –
你的意思是'(布尔)$ var;'因为我从来没有见过这两个!在一个变量 – rsz
'!'否定之前,所以两个双重否定,将其转换为布尔值... – jeremy
双重否定,正在考虑这一点。很奇怪。你觉得它完全可靠吗? –