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

