为什么分配给$bool1或$bool2与分配给括号中的同一语句不同


Why is assigning to $bool1 or $bool2 different from assigining to the same statement wrapped in parenthesis?

我完全弄糊涂了。为什么在语法层面上,下面的两个陈述会有什么不同?

$bool1=false;
$bool2=true;
//Statement1
$result=$bool1 or $bool2;  // Returns false
//Statement2
$result=($bool1 or $bool2);  // Returns true

据我所知,这两种说法应该完全相同。但是,出于某种原因,他们不是。我可以解决这个问题,但它们不完全相同的事实意味着我错过了语言的某些方面,我不知道该去哪里检查。

这是由于优先级规则。or的优先级低于=,因此Statement1被解析为:

($result = $bool1) or $bool2;

要获得所需内容,请使用||

$result = $bool1 || $bool2;

赋值运算符(=)的优先级高于或运算符(or

$result=$bool1 or $bool2;

首先执行$bool1到$result的赋值(给出FALSE),然后用$bool2执行or,这将导致FALSE

$result=($bool1 or $bool2);

括号强制首先执行$bool1 or $bool2,这是TRUE;然后将该值分配给$result

只是为了显示差异,请尝试

$result=$bool1 || $bool2;

$result=($bool1 || $bool2);

因为or运算符(||)的优先级高于赋值运算符(=

这是||or之间差异显著的情况之一

语句实际上是相同的,并且评估相同的东西,也就是说,如果您打印整行(包括分配部分

$bool1=false;
$bool2=true;
//Statement1
var_dump($result=$bool1 or $bool2);  // Returns true
//Statement2
var_dump($result=($bool1 or $bool2));  // Returns true

不同之处在于作业。在语句1中,它读作($result = $bool1) or $bool2,而语句2读作$result = ($bool1 or $bool2)

由于bool1是false,而bool1是true,因此在语句1中,您最终会得到$result or $bool2,其计算结果为true(但请注意($result仍然是false)

在语句2中,您最终只得到$result(并且$result为true)。