当逻辑AND返回FALSE时,为什么PHP返回0
,但当条件AND返回FALSE时,PHP不返回0
?证人:
php > function a(){
php { echo "a";
php { return FALSE;
php { }
php > function b(){
php { echo "b";
php { return TRUE;
php { }
php > echo (a() && b())."\n";
a
php >
php > echo (a() & b())."\n";
ab0
php >
请注意,第二个echo
语句以0
结尾,但第一个没有。为什么?
答案 0 :(得分:5)
&&
返回一个布尔值。转换为字符串时,布尔false
为''
,为空字符串。
&
是一个按位和(不是“条件和”,无论是什么),它会产生一个数字(或二进制blob,具体取决于参数)。在这种情况下,操作会产生数字0
。
答案 1 :(得分:2)
在第二种情况下
php > echo (aa() & b())."\n";
是按位AND
。您需要使用&&
进行比较
答案 2 :(得分:0)
实际上,所提供的答案都不完全正确。正确的答案有三个。
这里的“问题”是&&是一个短路运营商。所以它基本上从最左边的参数逐个移动到最右边的参数。对于每一个,它检查它是否返回true,如果没有,它将停止并且不会执行下一个语句。 PHP Documentation on logical operators
Ergo:在第一种情况下,由于短路,您只能看到(而不是b)。然后你也看不到0,因为它是一个布尔值(不是int)。
然后在第二种情况下,您会看到一个整数0,因为他使用的是按位AND而不是逻辑。