PHP出现Only variables should be passed by reference报错如何解决?
报错原因
array_shift() 函数的作用是弹出并移除数组的第一个元素,该函数的参数要求按引用传递,因为函数会直接修改传入的数组本身。你代码中直接将 array_values($errors) 的返回值(临时计算结果,不是实际存储的变量)传入 array_shift(),不符合传引用的参数要求,因此抛出了这个Notice提示。
你当前提供的代码中所有使用 array_shift(array_values(xxx)) 写法的位置都存在相同问题,不止第155行一处。
修复方法
你可以任选下列任意一种方案修改所有有问题的代码行:
- 方案一:先将
array_values的结果赋值给临时变量,再传入array_shift
以第155行的代码为例,原错误代码:
return array('status' => 'error', 'errors' => array_shift(array_values($errors)));
修改为:
$tmp_values = array_values($errors); return array('status' => 'error', 'errors' => array_shift($tmp_values));
- 方案二:直接取数组第一个下标,不需要调用
array_shift(PHP 5.4及以上版本支持,代码更简洁)
return array('status' => 'error', 'errors' => array_values($errors)[0]);
注意:代码中所有出现array_shift(array_values($v))、array_shift(array_values($qv))的位置都需要按照上述方法同步修改,避免其他位置触发相同报错。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

