You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP7.4报Only variables should be passed by reference的修复方法

报错触发原因

PHP的end()函数用于将数组内部指针移动到最后一个单元并返回其值,该函数的参数为按引用传递,要求传入的必须是已声明的实际数组变量,不支持直接传入函数执行返回的临时数组。
你当前代码直接将explode()生成的临时数组作为参数传入end(),因此在PHP 7.4环境下会抛出Notice: Only variables should be passed by reference提示。

修复方法

将嵌套函数调用中生成临时数组的步骤拆分为单独的变量赋值,再将变量传入end()即可消除提示,且完全保留原有逻辑。修改后的完整代码段如下:

$roots = array();
foreach ($data as $row) {
    // 拆分嵌套调用,将临时结果存入变量后再传入end
    $colonSplit = explode(':', $row->global_id);
    $sliceRes = array_slice($colonSplit, -2, 1);
    $commaSplit = explode(',', implode($sliceRes));
    $row->type = end($commaSplit);

    if ($row->parent_global_id === null) {
        $roots[] = $row;
    } else {
        $data[$row->parent_global_id]->children[] = $row;
    }
    unset($row->parent_global_id);
    unset($row->global_id);
}
无end()的简化实现

如果不想额外定义临时变量,也可以通过数组键直接取值,从根源规避引用传参的限制,逻辑和原代码完全一致:

$row->type = array_reverse(explode(',', implode(array_slice(explode(':', $row->global_id), -2, 1))))[0];

内容的提问来源于stack exchange,提问作者IlludiumPu36

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:06:25