PHP运算符优先级错误?

Bap*_*sta 7 php compiler-construction parsing operators

的结果:

var_dump(null != $a = 15);
var_dump($a);
Run Code Online (Sandbox Code Playgroud)

是:

bool(true)
int(15)
Run Code Online (Sandbox Code Playgroud)

为什么这个脚本不会触发错误?由于!=(不等于运算符)的优先级高于=(赋值运算符),$a应该与null第一个进行比较?

Jos*_*ost 6

我能找到的唯一原因是文档说这仍然是合法的:http://php.net/manual/en/language.operators.precedence.php#example-129

它似乎是上表中显示的例外.

  • 我认为另外需要注意的是对可读性的以下评论:"使用括号,即使不是非常必要,通常可以通过使分组显式而不是依赖隐式运算符优先级和关联性来提高代码的可读性." (3认同)
  • 有一个运算符优先级的规则,这个表达式明显违反规则,这称为异常.没什么大不了的,我正在继续...... (2认同)