double not运算符在PHP中做什么?
例如:
return !! $row;
上面的代码会做什么?
double not运算符在PHP中做什么?
例如:
return !! $row;
上面的代码会做什么?
Answers:
这不是“ double not运算符”,它是两次应用的not运算符。无论操作数如何,该权利!
都将导致布尔值。然后左边将否定该布尔值。!
这意味着对于任何真值(非零数字,非空字符串和数组等),您将获得布尔值TRUE
;对于任何假值(0、0.0 NULL
、、空字符串或空数组),您将获得布尔值FALSE
。
它在功能上等同于强制转换为boolean
:
return (bool)$row;
!!
等于(bool)
?还是会根据使用哪种机器码来运行不同的机器码?
!value
,如果刘海的偶数为奇数,则它将与相同(bool) value
。
与强制转换为bool相同(或几乎相同-可能会有一些极端情况)。如果$row
将其转换为true,则!! $row
也为true。
但是,如果您想实现(bool) $row
,则可能应该只使用-而不是使用一些“有趣的”表达式;)
!!
是C(++)编程中剩下的一种习惯。在C语言中,进行强制转换并不像在PHP中那样容易,所以您会遇到许多不同的问题,还会编译警告,因此人们会使用来强制转换!!
。
operator!
是可重载的,使用它C++
会很危险。同样,您不能在C中强制转换结构,也不能!
与它们一起使用。同样,如果某些东西可以取反,那么您很可能能够从返回int的函数中返回它,这几乎使它成为布尔值。您确定要谈论C吗?
!!
并不像您所说的那样“有趣”。从C到JavaScript到处都是。
这意味着如果$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
另一种更人性化(也许更简单)的方式来“阅读”不是:
首先 '!' 做两件事:将值“转换”为布尔值,然后输出相反的值。因此,如果该值是“虚假”值,它将为真。
第二 '!' 只是输出与第一个相反的内容。
因此,基本上,输入值可以是任何值,可以是字符串,但是您需要布尔输出,因此请使用第一个“!”。此时,如果输入值为'falsy'时希望为TRUE,则在此处停止并仅使用一个'!';否则,如果在输入值“ truthy”时希望为TRUE,则添加另一个“!”。
return (bool) $row;