为什么在PHP中的赋值表达式中最后会出现否定?

goy*_*ote 27 php

否定运算符的优先级高于赋值运算符,为什么它在表达式中较低?

例如

if (!$var = getVar()) {
Run Code Online (Sandbox Code Playgroud)

在前面的表达式中,赋值首先发生,后面的否定.不应该首先否定否定,然后是作业?

Nik*_*kiC 45

左手边= 必须是variable.$var是一个variable,而!$var不是(它是一个expr_without_variable).

因此PHP以唯一可能的方式解析表达式,即as !($var = getVar()).优先权永远不会在这里发挥.

优先级=相关的一个例子是:

$a = $b || $c // ==> $a = ($b || $c), because || has higher precedence than =
$a = $b or $c // ==> ($a = $b) or $c, because or has lower precedence than =
Run Code Online (Sandbox Code Playgroud)

  • 虽然接受的答案在技术上是正确的,但这个答案更彻底,更容易理解. (6认同)
  • 是的,如果可能的话,我会删除我的答案,而不是这个. (2认同)