PHP -带括号的简单条件


PHP - simple condition with parenthesis

关于这种情况我有一个愚蠢的问题。
为什么当我放入括号时,条件的结果改变了?

$std = new 'stdClass();
$std->bool = false;
$resultCond1 = isset($std->bool) and $std->bool == true;
$resultCond2 = (isset($std->bool) and $std->bool == true);
var_dump($resultCond1); // True. 
var_dump($resultCond2); // False.

我认为这是由于操作符优先级。

注意,在该表中,赋值操作符牢固地位于and&&之间。以下是我认为发生的事情:

在第一个例子中,isset返回true, 先于发生的and操作,赋值正在发生。赋值后,赋值结果为and 'ed, and操作的结果随即被丢弃。

在第二个示例中,圆括号指示最后进行赋值操作,从而得到预期的结果。

如果完全删除赋值操作,只转储操作本身的结果,可以更清楚地看到这一点:

var_dump(isset($std->bool) and $std->bool == true);   // bool(false)
var_dump((isset($std->bool) and $std->bool == true)); // bool(false)

由于运算符优先级的关系,这两个条件输出的结果不相同。

1)对于第一个- isset($std->bool)返回true,之后它将检查and $std->bool,最后将结果与true

进行比较

2)对于第二个-它将分别检查isset($std->bool)$std->bool == true。然后比较这两个结果。

第二个更方便&用更干净的方法来完成这类工作。