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
相关产品推荐
相关产品推荐

