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

PHP 7.4迁移出现变量传参警告,如何修改对应代码?

解决PHP 7.4中「Only variables should be passed by reference」警告

报错原因

PHP的end()函数要求参数为变量(通过引用传递),但原代码直接将explode(",", ...)的返回临时值传入end(),PHP 7.0及以上版本对传引用的参数检查更严格,因此触发该警告。

修改方案

将嵌套的函数调用拆分为多步,先把中间结果存入变量,再传给end():

修改前代码

$row->type = end(explode(",",(implode(array_slice(explode ( ':',  $row->global_id), -2, 1)))));

修改后代码(分步写法,可读性更强)

// 提取global_id倒数第二部分并转为字符串
$targetSegment = implode(array_slice(explode(':', $row->global_id), -2, 1));
// 按逗号拆分内容并存入变量
$typeArray = explode(",", $targetSegment);
// 取数组最后一个元素赋值
$row->type = end($typeArray);

简化写法(用array_pop替代end,无需额外变量)

如果不需要保留拆分后的数组,也可以直接用array_pop(),它支持直接接收函数返回值:

$targetSegment = implode(array_slice(explode(':', $row->global_id), -2, 1));
$row->type = array_pop(explode(",", $targetSegment));

完整修改后的代码块

$roots = array();    
foreach ($data as $row) {   
    $targetSegment = implode(array_slice(explode(':', $row->global_id), -2, 1));
    $typeArray = explode(",", $targetSegment);
    $row->type = end($typeArray);

    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);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:45:32