PHP 7.2 兼容性问题聚焦于废弃函数、数组语法变更和类型约束收紧三类雷区,通过日志定位致命错误、批量替换函数、修复数组与类型陷阱及使用 polyfill 可快速适配。

PHP 7.2 对老代码的兼容性问题集中在三类高频雷区:废弃函数调用、数组语法行为变更、类型约束收紧。不需重写整套逻辑,按模块针对性处理,通常1–2小时就能让项目跑通。
先定位致命错误源
别猜,直接看日志:
- 执行 php -d display_errors=1 -d error_reporting=-1 your_script.php 强制输出所有错误
- 重点捕获 Fatal error(如
Call to undefined function mysql_connect())和 Deprecated(如create_function() is deprecated) - 若页面空白但无报错,检查
php.ini中log_errors = On和error_log路径,用tail -f实时盯住错误日志
批量替换废弃函数
这些是 PHP 7.2 明确移除或废弃的核心函数,必须改:
-
mysql_* 系列 → 全部换成
mysqli_*或 PDO(推荐 PDO,语法统一):mysql_query($sql)→$pdo->query($sql) -
create_function() → 改用匿名函数:
create_function('$a,$b', 'return $a + $b;')→fn($a, $b) => $a + $b(PHP 7.4+)或function($a, $b) { return $a + $b; } -
each() → 改用
foreach或key()/current():while (list($k, $v) = each($arr)) { ... }→foreach ($arr as $k => $v) { ... }
修复数组与类型相关陷阱
这类问题不报错但结果异常,容易遗漏:
立即学习“PHP免费学习笔记(深入)”;
-
方括号赋值前未初始化:
错误写法:$data[] = 'item';(当$data是 null 或 string 时在 7.2 报 Warning)
正确写法:$data = $data ?? []; $data[] = 'item';或直接array_push($data ?? [], 'item'); -
数学函数传入字符串数字:
sqrt('4')在 5.5 可能正常,在 7.2 会触发 Notice;统一加类型转换:sqrt((float)'4') -
JSON 解析容错不足:
旧代码常只判json_decode($str) !== null,但 7.2 下非法 UTF-8 也返回 null 且json_last_error()可能为 0;应改为:$json = json_decode($str, true); if (json_last_error() !== JSON_ERROR_NONE) { /* 处理失败 */ }
临时兜底:用 polyfill + platform 声明
对一时无法修改的第三方库或深层依赖,快速上线可用:
- 安装 alcaeus/mcrypt-polyfill(解决 ext-mcrypt 缺失):
composer require alcaeus/mcrypt-polyfill - 绕过 Composer 对缺失扩展的检查:
在composer.json的config段加入:
"platform": { "ext-mcrypt": "1.0" } - 如仍报错,可临时加
--ignore-platform-reqs,但仅限部署验证,不可长期使用



















