飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

解决PHP7.3+phpexcel环境下错误continue targeting switch is equivalent to break

Author:飘易 Source:飘易
Categories:PHP编程 PostTime:2021-12-18 12:04:18
正 文:

飘易有个项目使用了 phpoffice/phpexcel  导出excel,之前使用正常,但是在切换了PHP7.3版本后,就报错了,提示:"continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?


排查 composer依赖包,发现是 maatwebsite/excel:2.1.30 依赖了 phpoffice/phpexcel:1.8.2,错误发生的位置是:vendor\\phpoffice\\phpexcel\\Classes\\PHPExcel\\Shared\\OLE.php:288

switch ($type) {
    case self::OLE_PPS_TYPE_ROOT:
        $pps = new PHPExcel_Shared_OLE_PPS_Root(null, null, array());
        $this->root = $pps;
        break;
    case self::OLE_PPS_TYPE_DIR:
        $pps = new PHPExcel_Shared_OLE_PPS(null, null, null, null, null, null, null, null, null, array());
        break;
    case self::OLE_PPS_TYPE_FILE:
        $pps = new PHPExcel_Shared_OLE_PPS_File($name);
        break;
    default:
        continue;
}

288行就是 switch 语法 default 里使用了 continue 导致报错的,怎么解决这个错误呢?其实提示也给出解决方案了,就是 使用 continue 2 或者 break 。


飘易跑到github上 phpoffice/phpexcel,发现这个包最新的版本就是1.8.2,而且作者把这个项目归档了且只读:https://github.com/PHPOffice/PHPExcel/blob/1.8.2/Classes/PHPExcel/Shared/OLE.php,看来想单独更新这个包就不方便了。


而phpexcel的上级依赖包的版本要求是:maatwebsite/excel:~2.1.0,波浪号的意思就是 >=2.1.0 且 < 2.2.0 (简单来说,~定义了最小的版本,并且允许版本的最后一位版本号进行升级)。项目里已经使用了 maatwebsite/excel 的符合条件的最高版本 2.1.30,但是这个 2.1 的版本却依赖了 phpoffice/phpexcel:^1.8.1,呵呵,到这里就陷入死胡同了。

波浪号~
~1.2.3相当于>=1.2.3 <1.3.0

折音号^
^1.2.3相当于>=1.2.3 <2.0.0


要彻底解决,则需要更新上级依赖包 maatwebsite/excel ,可用的新版本 3.1 的依赖要求是:

"require": {
    "ext-json": "*",
    "php": "^7.0|^8.0",
    "phpoffice/phpspreadsheet": "^1.18",
    "illuminate/support": "5.8.*|^6.0|^7.0|^8.0"
}


很遗憾,我的项目使用的 laravel 是 5.5 版本,而  maatwebsite/excel  3.1 最低要求laravel 5.8 版本。


 maatwebsite/excel  版本 3.0 的依赖要求是:

"require": {
	"php": "^7.0",
	"phpoffice/phpspreadsheet": "^1.2",
	"illuminate/support": "^5.5"
}

嗯,可以使用。


那么目前就有2种思路,一、升级 maatwebsite/excel  版本到 3.0;二、不升级 maatwebsite/excel  ,直接修改 vendor 文件夹里 vendor\\phpoffice\\phpexcel\\Classes\\PHPExcel\\Shared\\OLE.php 文件288行。

作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:Laravel计划任务schedule-withoutOverlapping一直不执行的问题
下一篇:如何清除开机自动安装无数垃圾软件的木马Adware(Gsui.a)
3条评论 “解决PHP7.3+phpexcel环境下错误continue targeting switch is equivalent to break”
2022-6-12 11:56:14
很不错的文章啊 支持一下哈
2023-5-4 16:20:03
你写得非常清晰明了,让我很容易理解你的观点。
2023-5-25 15:10:46
现在用PHP7.4的人挺多的
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有