首页  >  文章  >  后端开发  >  为什么括号会改变 PHP 中函数调用的语义?

为什么括号会改变 PHP 中函数调用的语义?

Barbara Streisand
Barbara Streisand原创
2024-10-28 20:03:02894浏览

 Why do Parentheses Change the Semantics of Function Calls in PHP?

括号改变函数调用结果的语义

在 PHP 中,将函数调用的结果括在括号中可以改变其语义,从而启用表达式否则会引发错误。如果没有关于此行为的明确文档,理解其工作原理可能会令人困惑。

此行为源于 Zend 引擎的解析逻辑。当 PHP 遇到非空函数参数列表时,它会将其归类为三种可能性之一:没有变量的表达式、变量或通过引用传递的变量。

通过在函数调用周围添加括号,参数不再被解释为函数调用。这会更改用于编译代码的操作码,从而删除指示函数调用的标志。

此外,Zend 引擎允许在某些情况下将引用计数为 1 的非引用视为引用。在提供的示例中, get_array() 返回的数组的引用计数为 1,满足此条件。

因此,括号可以防止函数调用被检测到,并且返回值被视为作为计数为 1 的引用,使表达式 Reset((get_array())) 按预期工作。

但是,请务必注意,此行为被视为错误,不应依赖。 PHP 语法的 EBNF 表示形式没有明确提及此行为,依赖它可能会导致意外结果。

以上是为什么括号会改变 PHP 中函数调用的语义?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn