为什么PHP在逻辑AND上没有为FALSE返回'0'?

时间:2014-02-11 10:33:41

标签: php conditional logical-operators

当逻辑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结尾,但第一个没有。为什么?

3 个答案:

答案 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而不是逻辑。