如何解决Moodle项目中的Deprecated(废弃)错误?
解决Moodle中moodle_recordset::rewind()的弃用警告
问题分析
这个警告源于PHP 7.4及以上版本对Iterator接口方法的返回类型检查更严格:Iterator::rewind()要求返回void,但旧版Moodle的moodle_recordset::rewind()方法既未声明正确返回类型,也未添加#[\ReturnTypeWillChange]属性抑制警告。即便降级到PHP 7.4,这种兼容性问题依然存在——因为7.4已开始强制执行接口方法的返回类型匹配规则。
修复方案
临时代码修改:
打开/var/www/html/moodle/lib/dml/moodle_recordset.php,找到第61行的rewind()方法,修改为:#[\ReturnTypeWillChange] public function rewind() { $this->current = $this->next(); }添加
#[\ReturnTypeWillChange]属性是PHP官方推荐的临时兼容手段,可让PHP忽略返回类型不兼容的警告。永久版本升级:
该问题在Moodle的较新版本中已被修复,建议升级到与PHP 7.4兼容的最新稳定版Moodle,从根源解决这类兼容性问题。应急错误屏蔽:
若暂时无法修改代码或升级,可调整PHP配置(php.ini)屏蔽弃用警告:error_reporting = E_ALL & ~E_DEPRECATED注意:此方法仅隐藏警告而非修复问题,可能错过其他重要错误提示,不建议长期使用。
内容的提问来源于stack exchange,提问作者Godfrey Temu
相关产品推荐
相关产品推荐

