逻辑与运算符的奇怪行为
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
?
顺便说一句:$var2
是 0
还是 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
有更高的优先级,但是 &&
比 =
有更高的优先级
是否有人能够解释这种行为:
<?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
?
顺便说一句:$var2
是 0
还是 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
有更高的优先级,但是 &&
比 =