澄清 PHP 运算符优先级!和=

问题描述 投票:0回答:2

我很高兴编码直到我写了这样的代码(在 PHP 8.2 中):

if (!$a = false) {
    echo '$a is false';
}

此代码段将按预期打印

$a is false
。但是根据 PHP 文档
!
运算符 =
 运算符具有更高的优先级
,因此 should be interpreted as
(!$a) = null
我知道这是错误的,但因此我的问题是:why ? 是否有允许这样做的“hack”?我是否缺少一些文件?

这对

instanceof
有意义:

$object = 'foo';
if (!$object instanceof SomeUnexistentClass) {
    echo '$object is not instance of SomeUnexistentClass)';
}

该代码将执行

echo
,因为
instanceof
! 运算符具有
greater
优先级。那么为什么以前的代码有效?

php operator-keyword operator-precedence
2个回答
2
投票

文档中有一个注释

虽然

=
的优先级低于大多数其他运算符,但 PHP 仍然允许类似于以下的表达式:
if (!$a = foo())
,在这种情况下,
foo()
的返回值被放入
$a
.


1
投票

如果您继续阅读您共享的文档,就会发现某处指出:

运算符优先级和结合性只决定表达式如何分组,它们不指定评估顺序。 PHP 不(在一般情况下)指定表达式的求值顺序,并且应避免假定特定求值顺序的代码,因为行为可能会在 PHP 版本之间发生变化或取决于周围的代码。

我相信这回答了你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.