有人能解释这种行为吗?
<?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:我知道我应该使用&&
,而且我总是这样做!
答案 0 :(得分:5)
实际上是因为&&
与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
,但是&&
的优先级高于=
答案 1 :(得分:1)
这是因为您使用了AND
-see here for full docs
但简而言之:
$ a和$ b |和|如果$ a和$ b都为TRUE,则为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)
所以您的代码按预期运行,只是与我最初的想法不同。