Codeigniter出现Required parameter follows optional parameter错误如何解决
问题原因
- 该错误是PHP 8.0及以上版本的语法约束导致的:PHP规定必选参数不能声明在可选参数之后,你当前的方法定义里,
$where = array()是带默认值的可选参数,后面的$order没有默认值属于必选参数,不符合语法要求。 - 低版本PHP(7.x及以下)仅会对该写法抛出警告,高版本PHP会直接抛出致命错误终止运行。
修复方案
两种方案可根据业务场景二选一:
方案1:给必选参数加默认值,适配原有调用逻辑
如果现有业务中存在大量仅传前2个参数、不需要排序的调用场景,选该方案无需改动现有调用代码:
public function get_all($tableName,$where = array(),$order = '') { $this->db->where($where); if (!empty($order)) { $this->db->order_by($order); } return $this->db->get($tableName)->result(); }
方案2:调整参数顺序,把必选参数移到可选参数前
如果所有调用场景都必须传入排序规则,选该方案可以强制约束调用规范:
public function get_all($tableName, $order, $where = array()) { return $this->db->where($where)->order_by($order)->get($tableName)->result(); }
注意:使用该方案需要同步修改所有调用
get_all方法的代码,调整参数传入顺序。
内容的提问来源于stack exchange,提问作者cancan
相关产品推荐
相关产品推荐

