PHP警告:Admin::delete声明需兼容Core::delete方法签名
报错原因
该警告由PHP子类重写父类方法的签名兼容性校验触发:
你的Admin类继承了Core类,重写父类delete方法时,方法参数列表和父类定义不匹配:
- 父类
Core的delete方法要求传入4个必填参数:$tbl、$database、$param、$id - 子类
Admin中重写的delete方法仅定义了1个带默认空值的参数$id
两者参数数量、参数规则不一致,PHP 7.0及以上版本会针对这类不兼容的重写抛出警告。
修复方案
根据业务逻辑二选一即可:
方案1(改动最小,推荐):调整子类方法签名,和父类保持兼容
你在Admin的delete方法中前三个参数是固定传值,不需要外部传入,只需要在定义方法时补全这三个参数并设置默认空值,即可满足签名兼容要求,内部业务逻辑不需要修改:// 修改controllers/admin.php中的delete方法 function delete($tbl = '', $database = '', $param = '', $id = '') { core::delete('admin','gammu','ID',$id); redirect('admin'); }注意:如果
core::delete是调用父类同名方法,建议改成parent::delete('admin','gammu','ID',$id)避免静态调用的潜在问题。方案2:修改子类方法名,避免重名冲突
如果Admin类中的delete方法只是业务层封装的专属入口,不是为了重写父类逻辑,直接修改方法名避开和父类方法重名即可,比如改成deleteAdmin:// 修改方法名 function deleteAdmin($id='') { core::delete('admin','gammu','ID',$id); redirect('admin'); }该方案需要同步修改所有路由、前端请求中指向该方法的调用地址。
内容的提问来源于stack exchange,提问作者newbieeee3
相关产品推荐
相关产品推荐

