为什么括号可以修复 PHP 函数调用中的'仅应通过引用传递变量”错误?

Linda Hamilton
发布: 2024-10-26 20:54:02
原创
150 人浏览过

Why do Parentheses Fix

括号和函数调用结果的含义

考虑以下示例:

<?php
function get_array() {
    return array();
}

function foo() {
    return reset(get_array()); // Error: "Only variables should be passed by reference"
}
登录后复制

在此代码中,发生错误的原因是函数调用的结果不是引用。但是,如果结果用括号括起来,错误就会消失:

function foo() {
    return reset((get_array())); // OK
}
登录后复制

这里发生了什么?

尽管没有明确描述此行为的文档,但可以通过检查来理解PHP 语法和编译器实现。

对解析的影响

括号导致 PHP 的解析器将函数调用的结果解释为表达式而不是变量。这会影响编译器解释代码的方式,特别是用于向函数发送变量的操作码。

引用计数和 Zend 引擎优化

Zend 引擎,PHP 的核心引擎,允许在需要引用的地方使用引用计数为 1 的非引用变量。在上面的示例中,返回的数组是引用计数为 1 的新对象。这允许 Zend 引擎优化代码并避免错误消息。

限制

需要注意的是,此行为被视为错误,不应依赖。函数调用结果的引用计数可能会在未来的 PHP 版本中发生变化,从而破坏依赖于此行为的代码。

替代解决方案

避免依赖这种潜在的不稳定行为,将函数调用的结果显式分配给变量:

function foo() {
    $result = get_array();
    return reset($result);
}
登录后复制

以上是为什么括号可以修复 PHP 函数调用中的'仅应通过引用传递变量”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!