TP8必须用PHP≥8.0.0,低于此版本直接无法启动;底层强依赖联合类型、属性提升、ReflectionParameter::getType()等PHP 8.0+特性,TP6.1.5在PHP 8.0下仅报Deprecated警告,而TP8已彻底移除旧反射兼容逻辑。

必须用 PHP ≥ 8.0.0,低于这个版本直接无法启动,不是报错而是根本加载失败。
PHP 8.0 是硬性门槛,不是推荐
TP8 底层大量使用 PHP 8.0+ 新特性:联合类型、属性提升、构造器参数类型声明、ReflectionParameter::getType() 替代已废弃的 getClass()。TP6.1.5 在 PHP 8.0 下会触发大量 Deprecated 警告(比如 Method ReflectionParameter::getClass() is deprecated),而 TP8 已彻底移除对这些旧反射 API 的兼容逻辑。
- 运行
php -v确认输出中主版本号是8.0或更高(如8.1.1、8.2.20、8.5.12) - 不能只看
phpinfo()页面——CLI 和 FPM 的 PHP 版本可能不同,需分别验证:php -v和php-fpm -v或通过php -r "echo PHP_VERSION;" - 若用阿里云 ECS 或 Docker,注意系统镜像自带的 PHP 可能仍是 7.4,必须手动升级或换镜像(如
php:8.1-apache)
PHP 8.5.12 RC 1 可用,但不建议上生产
虽然知识库提到 PHP 8.5.12 RC 1 修复了 PDO、Opcache/JIT、TLS 流状态等关键问题,但它仍是候选版(RC)。TP8 官方未做该版本的全量测试,尤其 JIT 编译器在复杂模型关联查询下可能触发不可预知的优化错误。
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 开发/测试环境可尝试,但上线前务必切回稳定版(如
8.1.29、8.2.24) -
opcache.enable=1和opcache.jit=1255组合在 RC 版中曾导致路由解析缓存错乱,表现为部分 URL 404 且无日志 - 检查
php -m | grep -E "(pdo|mbstring|fileinfo|openssl|json)",确保扩展全部启用——TP8 对intl扩展依赖更强(如日期格式化、区域化验证)
常见误判点:以为“能跑就是兼容”
有些项目在 PHP 8.0 下看似能访问首页,但实际已埋下隐患。典型表现是:
立即学习“PHP免费学习笔记(深入)”;
- 中间件顺序错乱(如鉴权中间件没执行,但没报错)
-
Db::transaction()内部异常被静默吞掉,事务未回滚 - 模型批量赋值(
$model->saveAll($list))返回值类型与 TP6 不一致,前端拿不到 ID 数组 - 使用
??运算符时,TP8 对 null 合并的类型推导更严格,某些嵌套数组访问会抛TypeError
真正要确认的不是“有没有语法错误”,而是所有核心业务流程在 PHP 8.0+ 下是否行为一致——尤其是数据库写入、文件上传、定时任务触发这三个最易出问题的环节。


















