Php 逻辑AND运算符的奇怪行为

Php 逻辑AND运算符的奇怪行为,php,operators,boolean-expression,Php,Operators,Boolean Expression,有人能解释这种行为吗: <?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 输出来自PHP7.0 为什么第一个输出为真,而第三个输出为假 顺便说一下:$var2是0还是

有人能解释这种行为吗:

<?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
输出来自PHP7.0

为什么第一个输出为真,而第三个输出为假

顺便说一下:$var2是0还是false并不重要。行为是一样的


@所有人:我知道我应该使用&&而且我总是这样做

这是因为你使用了和-

但简而言之:

$a和$b |和|如果$a和$b都为真,则为真

现在让我们看一下您的代码:

$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不同

在&&案例中,您实际编写了$var3=$var1&&$var2

在和的情况下,您实际编写了$var3=$var1和$var2


这是因为=的优先级高于,而&&的优先级高于=

您是否尝试过&&,它为所有人提供了相同的优先级cases@treyBake不是不同于和
$var1 = true;
$var2 = 0;

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

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