首页 > 后端开发 > php教程 > 为什么 `array_shift()` 会触发'严格标准:只有变量应该通过引用传递”?

为什么 `array_shift()` 会触发'严格标准:只有变量应该通过引用传递”?

Susan Sarandon
发布: 2025-01-03 17:27:43
原创
892 人浏览过

Why Does `array_shift()` Trigger

错误消息“严格标准:只有变量应该通过引用传递”

使用 array_shift() 时,可能会报告严格标准如果传递的参数是函数调用的结果,则会发出警告。这种行为看似不一致,因为它并不总是触发警告。

考虑以下代码:

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

在此示例中,引发警告是因为 find() 方法是不是一个变量。但是,以下代码不会产生警告:

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

要理解此行为,让我们分析不同的代码片段:

error_reporting(E_STRICT);
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() 方法不是变量,而是通过引用传递。此行为是违反直觉的,因为该方法返回一个数组值。

要在严格模式下避免此错误,请更改方法签名以避免使用引用或使用中间变量:

function test_arr($a) {
    var_dump($a);
}

$inter = get_arr();
$el = array_shift($inter);
登录后复制

以上是为什么 `array_shift()` 会触发'严格标准:只有变量应该通过引用传递”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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