<p>PHP 8.2 移除了 each()、createfunction()、mysql* 系列函数、mbstring.func_overload 配置项,禁止无类型声明的 __construct() 自动调用父构造器,数组解包要求操作数必须可遍历,且需 Composer 2.5+ 和兼容的扩展版本。</p>

PHP 7.3 升级到 8.2 不是平滑过渡,而是跨两个大版本的跳跃,很多被标记为 deprecated 的特性在 8.2 中已彻底移除,直接运行会报错甚至中断。
哪些函数和语法在 PHP 8.2 中被删了
PHP 7.3 还能用、但 8.2 已经砍掉的东西,必须提前清理:
-
each()、create_function()、mysql_*系列(早就不该用了)——这些在 7.4 就废弃,8.0 起完全消失 -
mbstring.func_overload配置项被移除,如果 php.ini 里还开着它,PHP 启动失败 - 不带类型声明的
__construct()方法,在严格模式下不会触发自动调用父类构造器(影响某些老框架的初始化逻辑) - 数组解包(
...)现在要求操作数必须是可遍历对象或数组;传null或字符串会直接Fatal error,而 7.3 只是警告
扩展兼容性最容易卡住的地方
不是所有扩展都同步支持 PHP 8.2,尤其 Windows 下手动装的 DLL 包,稍不注意就报 PHP Startup: Unable to load dynamic library:
- 确认扩展是为
PHP 8.2 TS(线程安全)或NTS(非线程安全)编译的,和你的 PHP 版本、Apache/Nginx 模式必须一致 -
phpredis、mongodb、igbinary这类 C 扩展,别用旧版 DLL;去 windows.php.net/pecl 找对应 8.2.x 的最新发布 -
mysqli和pdo_mysql默认启用,但如果你用的是 PHPStudy 或 XAMPP,得检查php.ini里是否写了extension=php_mysqli.dll,且路径指向的是 8.2 对应的ext/目录
Laravel / WordPress / Drupal 这类 CMS 实际跑不起来的典型原因
框架本身有最低 PHP 版本门槛,光升级 PHP 不等于能跑:
立即学习“PHP免费学习笔记(深入)”;
- Laravel 8.x:官方不支持 PHP 8.2+,
php artisan tinker会直接Fatal error: Uncaught TypeError,因为反射 API 行为变了 - WordPress 6.0+:基本兼容 8.2,但插件可能不行;遇到
Deprecated: Function get_magic_quotes_gpc() is deprecated这类提示,说明插件还活在 PHP 5 时代 - Drupal 9:最低要求 PHP 7.3,但推荐 7.4+;Drupal 10 强制要 PHP 8.1+,所以从 7.3 升 8.2 前,必须先升到 Drupal 10
最常被忽略的一点:升级后 composer install 可能失败,不是因为依赖冲突,而是 Composer 自身版本太低。PHP 8.2 需要 Composer 2.5+,低于这个版本会报 ParseError: syntax error, unexpected token "readonly" —— 因为 8.2 支持 readonly 类属性,旧 Composer 解析不了。别跳过 composer self-update 这一步。



















