双不操作符在PHP中做什么?
例如:
return !! $row;
上面的代码会做什么?
它与转换为bool类型相同(或几乎相同-可能有一些极端情况)。如果$row转换为true,则!! $row也是true。
$row
!! $row
但如果你想实现(bool) $row,你可能只应该使用它——而不是一些“有趣的”表达式;)
(bool) $row
这意味着如果$row有一个真相值,它将返回true,否则返回false,转换为一个布尔值。
true
false
下面是php文档中表达式到布尔值转换的示例。
Expression Boolean $x = ""; FALSE $x = null; FALSE var $x; FALSE $x is undefined FALSE $x = array(); FALSE $x = array('a', 'b'); TRUE $x = false; FALSE $x = true; TRUE $x = 1; TRUE $x = 42; TRUE $x = 0; FALSE $x = -1; TRUE $x = "1"; TRUE $x = "0"; FALSE $x = "-1"; TRUE $x = "php"; TRUE $x = "true"; TRUE $x = "false"; TRUE
它不是“double not操作符”,而是应用了两次的不操作符。右边的!将会得到一个布尔值不管操作数是什么。然后左边的!将对该布尔值求反。
!
这意味着对于任何真值(非零的数字,非空字符串和数组等),你将得到布尔值TRUE,而对于任何假值(0,0.0,NULL,空字符串或空数组),你将得到布尔值FALSE。
TRUE
NULL
FALSE
它在功能上等价于对boolean的强制转换:
boolean
return (bool)$row;
在许多语言中,“not not”是一种方便的方式,用于理解语言赋予任何表达式的结果的真值。例如,在Python中:
>>> not not [] False >>> not not [False] True
当您想要将一个复杂的值简化为“到底有没有值?”时,使用这种方法非常方便。
另一种更人性化,可能更简单的“读”not not的方式:
第一个!'做两件事:'转换'值布尔值,然后输出相反的。因此,如果值是“假的”,它将返回true。
第二个!'就是输出与第一个相反的结果。
所以,基本上,输入值可以是任何东西,也许是一个字符串,但你想要一个布尔输出,所以使用第一个'!'。在这一点上,如果你想要TRUE当输入值是'falsy',那么在这里停止,只使用一个'!';否则,当输入值为“真”时,如果你想要TRUE,则添加另一个“!”。
让我们看看
!$a;
而不是解读!算子作为取
与它右边的< em > < / em >价值相反的布尔值
读
取它右边与< em > < / em >表达相反的布尔值
在这种情况下
$a;
可以是表达式
所以是
那么,
!!$a;
而且
!!!$a;
依此类推,因为每个表达式都是有效的表达式,所以!运算符可以加在它们的前面。