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