PHP中的双not(!!)操作符

操作符在PHP中做什么?

例如:

return !! $row;

上面的代码会做什么?

51676 次浏览

它与转换为bool类型相同(或几乎相同-可能有一些极端情况)。如果$row转换为true,则!! $row也是true。

但如果你想实现(bool) $row,你可能只应该使用它——而不是一些“有趣的”表达式;)

这意味着如果$row有一个真相值,它将返回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

它在功能上等价于对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;

而且

!!!$a;

依此类推,因为每个表达式都是有效的表达式,所以!运算符可以加在它们的前面。