double not运算符在PHP中做什么?
例如:
return !! $row;
Run Code Online (Sandbox Code Playgroud)
上面的代码会做什么?
The*_*heo 278
这不是"双不操作",这是不是运营商应用的两倍.无论操作数如何,右边!都会产生一个布尔值.然后左边将否定该布尔值.!
这意味着对于任何真值(非零数字,非空字符串和数组等),您将获得布尔值TRUE,对于任何错误值(0,0.0 NULL,空字符串或空数组),您将获得布尔值FALSE.
它在功能上等同于强制转换为boolean:
return (bool)$row;
Run Code Online (Sandbox Code Playgroud)
vir*_*tor 51
对于布尔来说,它是相同的(或几乎相同 - 可能有一些角落的情况).如果$row会转为真,那么!! $row也是如此.
但是如果你想实现(bool) $row,你应该只使用那个 - 而不是一些"有趣"的表达;)
YOU*_*YOU 17
这意味着如果$row有一个truthy值,它将返回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
Run Code Online (Sandbox Code Playgroud)
"不是不是"在许多语言中是一种方便的方式,用于理解语言赋予任何表达结果的真值.例如,在Python中:
>>> not not []
False
>>> not not [False]
True
Run Code Online (Sandbox Code Playgroud)
在想要将复杂值降低到"有价值吗?"之类的地方,它可以很方便.