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

ste*_*ven 0 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
Run Code Online (Sandbox Code Playgroud)

输出来自PHP 7.0

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

顺便说一句:$var20或没关系false。行为是相同的。

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

Mic*_*hel 5

It actually comes because && is different from AND.

$var1 = true;
$var2 = 0;

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

$var3 = $var1 AND $var2;
var_export($var3); // Output: true
Run Code Online (Sandbox Code Playgroud)

In the && case you actually write $var3 = ( $var1 && $var2 )

In the AND case you actually write ( $var3 = $var1 ) AND $var2

That's because = has greater precedence then AND, but && has greater precedence then =