首页  >  文章  >  后端开发  >  为什么将函数调用括在括号中会将其转换为 PHP 中的表达式?

为什么将函数调用括在括号中会将其转换为 PHP 中的表达式?

Barbara Streisand
Barbara Streisand原创
2024-10-31 07:45:02410浏览

Why Does Wrapping a Function Call in Parentheses Transform it into an Expression in PHP?

括号将函数调用结果转换为表达式

在 PHP 中,将函数调用的结果括在括号中可以令人惊讶地将结果转换为полноценное выражение,如以下示例所示:

<?php

function get_array() {
   return array();
}

function foo() {
   return reset((get_array()));
}

foo();

尽管文档中没有明确的解释,但上述代码可以正常运行,不会出现错误。让我们详细研究一下这种行为。

第一个条件:非函数调用参数

由于添加了括号,PHP 不再将参数识别为函数调用,而是作为“expr_without_variable”。解析中的这种变化会影响代码的编译方式,最终从“SEND_VAR_NO_REF”操作码中删除“函数调用”标志。

第二个条件:引用计数为 1

Zend 引擎偶尔允许在需要引用的情况下引用计数为 1 的非引用。在此示例中,返回的数组的引用计数为 1,满足此条件。但是,如果从其他地方引用该数组,则不会满足第二个条件,从而导致错误。

结论

虽然这种行为看起来很方便,但实际上值得注意的是,它不是一个记录在案的功能,应该被视为一个可能的错误。依赖它可能会导致代码出现意外错误和不稳定。因此,强烈建议避免使用这种语法,而是使用正确的表达式以避免歧义并确保结果可预测。

以上是为什么将函数调用括在括号中会将其转换为 PHP 中的表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!

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