PHP变量赋值需要括号

时间:2014-05-30 02:56:56

标签: php

我写了一些代码,发现它没有像我预期的那样工作。

例如,以下内容将返回false或抛出异常Undefined variable: a

if ($a = 12 && $a == 12) {
    return true;
} else {
    return false;
}

我通过将作业包装在括号中来修复它:

if (($a = 12) && $a == 12) {
    return true;
} else {
    return false;
}

这只是一个幸运的猜测。我想知道为什么需要括号,而我却找不到任何解释原因的方法。

1 个答案:

答案 0 :(得分:7)

那是因为operator precedence。赋值运算符=的优先级低于&&,因此如果没有括号,您实际上是在执行以下操作。

if ($a = (12 && $a == 12))

观察到在赋值发生之前尚未定义第二个$a,因为必须在赋值发生之前对其进行评估。