Laravel项目必须按框架版本反向锁定PHP环境,强行混用会触发Fatal error或ParseError;Laravel 8.x限PHP 7.3–8.1,9.x需PHP 8.0.2+但不兼容8.3,10.x须≥10.42才支持8.3,11.x原生支持8.2+且拒绝8.1。

选 PHP 版本不是看“最新”,而是看项目用的 Laravel 版本是否真正支持它。Laravel 和 PHP 是硬绑定关系,不匹配就报错——不是警告,是 Fatal error、ParseError 或静默 500。
先查清你实际在跑哪个 Laravel 版本
别信 composer.json 里写的,运行这行命令才准:
php artisan --version
输出类似 10.48.2 或 11.12.0,这才是真实框架版本。再对照官方硬性要求:
立即学习“PHP免费学习笔记(深入)”;
- Laravel 8.x → 只认 PHP 7.3–8.1(不支持 8.2+)
- Laravel 9.x → 要求 PHP 8.0.2+,但 不兼容 8.3 的 ReflectionUnionType 变更
- Laravel 10.x → 必须 ≥ 10.42 才支持 PHP 8.3;低于这个版本,vendor/autoload.php 直接 fatal
- Laravel 11.x(2026 年主力)→ 原生支持 PHP 8.2+,拒绝 PHP 8.1(enum 类型、never 返回值等语法不可降级)
PHP 8.1 / 8.2 / 8.3 到底怎么选
按项目阶段分场景判断:
- 新项目起步:直接上 Laravel 11 + PHP 8.2(Ubuntu 24.04/Debian 12 原生支持),或 Laravel 10.42+ + PHP 8.3(需 Composer 2.7+、关闭 mbstring.strict)
-
已有 Laravel 8/9 项目:别升 PHP 8.2+,尤其别碰 8.3——升级 PHP 不如先升框架,否则
php artisan tinker都进不去 - 维护老系统(如 Laravel 7):锁死 PHP 7.4,PHP 8.0+ 会炸掉 Symfony Console,连 artisan serve 都启动失败
常见踩坑操作,务必避开
这些“捷径”只会把问题拖到运行时,且更难排查:
- 用
composer install --ignore-platform-reqs强装依赖 → 启动时报ParseError: unexpected token "enum" - 在 composer.json 里加
"platform-check": false→ 不阻止错误,只屏蔽警告 - 全局改
/usr/bin/php软链指向 8.3 → 宝塔后台、apt、cron 任务全崩 - Nginx 配置没改
$realpath_root→ 报Class 'Illuminate\Foundation\Application' not found,因为入口文件路径错了
多项目共存时的真实解法
一台机器跑 Laravel 6(要 PHP 7.2)、Laravel 9(要 PHP 8.1)、Laravel 11(要 PHP 8.2),靠“切换全局 PHP”是自毁式操作:
-
Docker 方案:每个项目配独立
docker-compose.yaml,指定php:7.2-apache、php:8.1-fpm、php:8.2-cli镜像,Nginx 反向代理到不同端口 -
本地开发管理器:Mac 用
brew install php@7.4 php@8.1 php@8.2,用brew link --force php@8.1切换;Linux 用update-alternatives --config php;Windows 推荐 Laragon,界面点选即切



















