我很高兴编码直到我写了这样的代码(在 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 仍然允许类似于以下的表达式:=
,在这种情况下,if (!$a = foo())
的返回值被放入foo()
.$a
如果您继续阅读您共享的文档,就会发现某处指出:
运算符优先级和结合性只决定表达式如何分组,它们不指定评估顺序。 PHP 不(在一般情况下)指定表达式的求值顺序,并且应避免假定特定求值顺序的代码,因为行为可能会在 PHP 版本之间发生变化或取决于周围的代码。
我相信这回答了你的问题。