首页  >  文章  >  后端开发  >  为什么括号可以修复 PHP 函数调用中的“仅应通过引用传递变量”错误?

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

Linda Hamilton
Linda Hamilton原创
2024-10-26 20:54:02151浏览

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中文网其他相关文章!

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