Magento2执行setup:di:compile时报PHP可选参数顺序弃用错误
Magento 2.4.4 setup:di:compile 报错修复
问题原因
该报错由PHP 8.0+版本语法规则变更触发,Magento 2.4.4官方支持PHP 8.1运行环境,你使用的第三方MGS Fbuilder模块代码未适配高版本PHP语法规范:函数声明中,带默认值的可选参数不能放在无默认值的必选参数之前,否则PHP会抛出该Deprecated级别错误,直接中断DI编译流程。
报错明细
- 错误类型:
Deprecated Functionality: Optional parameter $ids declared before required parameter $checkedCat is implicitly treated as a required parameter - 出错文件路径:
/home/seedsat/public_html/magento244/app/code/MGS/Fbuilder/Helper/Data.php - 出错行号:第162行
- 原问题代码:
public function getTreeCategory($category, $parent, $ids = [], $checkedCat)
修复方法
可根据实际场景二选一修复:
方案1(规范修复,推荐)
调整参数声明顺序,将所有无默认值的必选参数放在带默认值的可选参数之前,符合PHP官方语法要求。
将第162行代码修改为:
public function getTreeCategory($category, $parent, $checkedCat, $ids = [])
*注意:修改函数定义后,需要全局搜索项目中所有调用getTreeCategory方法的位置,对应调整传参顺序,保证第三个传入参数为$checkedCat的目标值,第四个传入参数为原$ids数组,避免传参错位引发业务逻辑错误。
方案2(快速修复,无需调整调用逻辑)
如果不想逐一修改方法调用位置,可以给位于可选参数后的必选参数设置符合业务逻辑的默认值,满足PHP语法要求。
将第162行代码修改为(默认值可根据业务实际场景调整,分类选中参数默认设为null或空数组均可适配绝大多数场景):
public function getTreeCategory($category, $parent, $ids = [], $checkedCat = null)
修复后验证
文件修改完成后,在Magento根目录执行以下命令重新完成编译和缓存清理:
php bin/magento setup:di:compile php bin/magento cache:clean php bin/magento cache:flush
命令执行无报错即修复完成。
内容的提问来源于stack exchange,提问作者user3096020
相关产品推荐
相关产品推荐

