括号改变函数调用结果的语义
在 PHP 中,将函数调用的结果括在括号中可以改变其语义,从而启用表达式否则会引发错误。如果没有关于此行为的明确文档,理解其工作原理可能会令人困惑。
此行为源于 Zend 引擎的解析逻辑。当 PHP 遇到非空函数参数列表时,它会将其归类为三种可能性之一:没有变量的表达式、变量或通过引用传递的变量。
通过在函数调用周围添加括号,参数不再被解释为函数调用。这会更改用于编译代码的操作码,从而删除指示函数调用的标志。
此外,Zend 引擎允许在某些情况下将引用计数为 1 的非引用视为引用。在提供的示例中, get_array() 返回的数组的引用计数为 1,满足此条件。
因此,括号可以防止函数调用被检测到,并且返回值被视为作为计数为 1 的引用,使表达式 Reset((get_array())) 按预期工作。
但是,请务必注意,此行为被视为错误,不应依赖。 PHP 语法的 EBNF 表示形式没有明确提及此行为,依赖它可能会导致意外结果。
以上是为什么括号会改变 PHP 中函数调用的语义?的详细内容。更多信息请关注PHP中文网其他相关文章!