PHP - 带括号的简单条件

时间:2016-10-13 21:03:50

标签: php conditional-statements

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

$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.

2 个答案:

答案 0 :(得分:3)

我认为这是由于operator precedence

请注意,该表中的赋值运算符位于and&&之间。以下是我的想法:

在第一个示例中,isset返回true,并且之前返回正在进行分配的and操作。在分配之后,分配的结果为and,然后立即丢弃该and操作的结果。

在第二个例子中,括号表示赋值发生在最后,所以你得到了预期的结果。

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

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

答案 1 :(得分:3)

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

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

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

第二个更方便&更简洁的方式来完成这种类型的工作。