括号将函数调用结果转换为表达式
在 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中文网其他相关文章!