逻辑与运算符的奇怪行为

Strange behaviour on logical AND-Operators

是否有人能够解释这种行为:

<?php

$var1 = true;

$var2 = 0;

$var3 = $var1 AND $var2;

var_export($var3); // Output: true

var_export(true AND 0); // Output: false    

var_export($var1 AND $var2); // Output: false

输出来自PHP 7.0

为什么第一个输出是true而第三个输出是false

顺便说一句:$var20 还是 false 并不重要。行为相同。

@all:我知道我应该使用 &&,而且我总是这样做!

因为你使用了AND - see here for full docs

但简而言之:

$a and $b | And | TRUE if both $a and $b are TRUE.

现在让我们来看看你的代码:

$var1 = true; # this is true
$var2 = 0; # this is false
$var3 = $var1 && $var2; # this will be false as $var2 is false

var_export($var3); # my machine shows false
var_export(true && 0); # this shows false as expected, 0 == false
var_export($var1 && $var2); # $var2 is false. This shows false

编辑

真正的原因是 && 具有更高的优先级 - 这就是为什么上面的代码做了我最初认为它应该使用 AND 做的事情。事实并非如此,请看这里:

$g = true && false;

# The constant true is assigned to $h before the "and" operation occurs
# Acts like: (($h = true) and false)
$h = true and false;

var_dump($g, $h);

# outputs:
# bool(false)
# bool(true)

所以您的代码按预期运行,只是方式与我最初的想法不同。

其实是因为&&AND不一样。

$var1 = true;
$var2 = 0;

$var3 = $var1 && $var2;
var_export($var3); // Output: false

$var3 = $var1 AND $var2;
var_export($var3); // Output: true

&& 的情况下你实际上写 $var3 = ( $var1 && $var2 )

AND 的情况下你实际上写 ( $var3 = $var1 ) AND $var2

那是因为 =AND 有更高的优先级,但是 &&=

有更高的优先级