首页 > 后端开发 > php教程 > 为什么 PHP 会发出'仅应通过引用传递变量”警告,以及如何解决这些警告?

为什么 PHP 会发出'仅应通过引用传递变量”警告,以及如何解决这些警告?

Mary-Kate Olsen
发布: 2025-01-03 22:46:42
原创
669 人浏览过

Why Does PHP Issue

理解严格标准警告:“仅变量应通过引用传递”

在 PHP 中,触发“仅变量应通过引用传递”的严格标准警告当尝试通过引用函数或方法传递非变量时。

解释行为

考虑以下代码:

$el = array_shift($instance->find());
登录后复制

此代码会生成严格标准警告,因为 $instance->find() 返回一个数组,而不是变量。当作为参数传递时,它尝试通过引用传递数组(使用 & 运算符),这会触发警告。

但是,在以下代码中:

function get_arr(){
    return array(1, 2);
}
$el = array_shift(get_arr());
登录后复制

严格的标准不会报告警告,因为 get_arr() 是一个返回数组的函数。因此,它被视为变量而不仅仅是数组值。

根本原因

严格标准警告特别发生在调用方法或函数且其返回值为通过引用传递。例如,考虑以下代码:

class test {
    function test_arr(&$a) {
        var_dump($a);
    }
    function get_arr() {
        return array(1, 2);
    }
}

$t = new test;
$t->test_arr($t->get_arr());
登录后复制

在此代码中,会生成严格标准警告,因为 $t->get_arr() 返回一个数组,而不是变量。但是,它是使用 & 运算符通过引用 test_arr 方法传递的。

解决方案

要解决严格标准警告,有两种可能的方法:

  1. 修改方法签名:更改方法的签名以不使用引用参数。例如:
function test_arr($a) {
    var_dump($a);
}
登录后复制
  1. 使用中间变量: 创建一个中间变量,将方法的返回值分配给它,并通过引用传递中间变量。例如:
$inter = $instance->find();
$el = array_shift($inter);
登录后复制

以上是为什么 PHP 会发出'仅应通过引用传递变量”警告,以及如何解决这些警告?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板