双不运算符在PHP中做什么?
例如:
return !! $row;
上面的代码会做什么?
答案 0 :(得分:264)
这不是“双重运算符”,而是不运算符应用了两次。右!
将产生一个布尔值,无论操作数如何。然后左!
将否定该布尔值。
这意味着对于任何真值(非零数字,非空字符串和数组等),您将获得布尔值TRUE
,以及任何错误值(0,0.0,{{ 1}},空字符串或空数组)您将获得布尔值NULL
。
它在功能上等同于对FALSE
:
boolean
答案 1 :(得分:49)
同样(或几乎相同 - 可能有一些角落的情况)作为对bool的投射。如果$row
转为true,那么!! $row
也是如此。
但是如果你想要实现(bool) $row
,你应该只使用它 - 而不是一些“有趣”的表达式;)
答案 2 :(得分:17)
这意味着如果$row
的{{3}}值为true
,则会返回false
,否则为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
,转换为布尔值。
以下是来自php docs的布尔转换的示例表达式。
{{1}}
答案 3 :(得分:7)
“not not”是许多语言中用于理解语言分配给任何表达式结果的真值的便捷方式。例如,在Python中:
>>> not not []
False
>>> not not [False]
True
在想要将复杂值降低到“根本没有价值”的地方,这可能很方便。
答案 4 :(得分:1)
另一种更人性化,更简单的方式来阅读'不是没有:
第一个'!'做两件事:'转换'布尔值,然后输出其相反的值。因此,如果价值是假的,那么它将是真实的。之一。
第二个'!'只是输出与第一个相反的。
所以,基本上,输入值可以是任何东西,也许是一个字符串,但你想要一个布尔输出,所以使用第一个'!'。此时,如果您想在输入值为'falsy'时为TRUE,那么请在此处停止并使用单个'!&#39 ;;否则,如果您想在输入值为“真实”时为TRUE,则添加另一个'!'。
答案 5 :(得分:0)
让我们看看
{}
而不是解释!运算符
相对于 值 右侧的布尔值
阅读
将 表达式 的布尔相反项放在其右侧
在这种情况下
!$a;
可能是表达式
原样是
$a;
也是
!$a;
和
!!$a;
,依此类推,因为每个都是有效表达式,所以!每个运算符都可以放在运算符的前面。