PHP7迁移核心是针对性修改四类变化:废弃函数/扩展需替换(如mysql_*→PDO)、补全类型声明与返回值语法、错误转为可捕获Error异常、修正语法细节与保留字冲突。

PHP5 项目迁移到 PHP7,核心不是“重写”,而是针对性修改几类关键变化点。多数代码能直接运行,但以下四类必须检查和调整,否则会报错、异常或行为不一致。
废弃函数和扩展必须替换
PHP7 移除了多个长期弃用的函数和整个扩展,调用即致命错误:
-
mysql_* 系列函数(如 mysql_connect)已完全删除 → 改用
PDO或mysqli,推荐 PDO(支持预处理防注入) -
ereg_*、eregi_* 正则函数被移除 → 全部换成
preg_match()、preg_replace(),注意 PCRE 模式需加分隔符(如/pattern/) -
create_function() 被废弃并最终移除 → 替换为匿名函数,例如:
array_map(function($x) { return $x * 2; }, $arr) - set_magic_quotes_runtime()、call_user_method() 等杂项函数也已删除 → 查文档确认替代方案,多数可直接删或用原生语法替代
类型声明与返回值语法要补全
PHP7 引入了标量类型声明和返回类型,虽默认是弱类型兼容模式,但启用严格模式(declare(strict_types=1))后,不匹配会报 TypeError:
- 函数参数加类型:把
function format($str, $len)改为function format(string $str, int $len): string - 返回值加类型声明:在函数末尾加
: type,如: array、: ?int(问号表示可返回 null) - 慎用
strict_types=1:建议先在新模块启用,老代码逐步迁移,避免批量报错
错误处理机制从“警告/致命”变为“可捕获异常”
PHP7 将很多原本不可捕获的致命错误(如类型不匹配、调用不存在的方法)转为 Error 类异常,继承自 Throwable:
立即学习“PHP免费学习笔记(深入)”;
- 原有
@抑制符对Error无效 → 应改用try-catch捕获TypeError、ParseError等 - 自定义错误处理器(
set_error_handler)无法捕获Error→ 需配合set_exception_handler和try-catch分层处理 - 检查日志中是否仍有大量
E_DEPRECATED提示 → 这些是升级前的过渡警告,PHP7 中已转为错误或直接移除
语法细节与保留字冲突需微调
部分写法在 PHP7 解析更严格,容易静默失败或意外报错:
-
类名、方法名、常量名不能与新增保留字冲突:如
object、void、iterable、nullable在 PHP7.1+ 成为保留字,若旧代码用作变量名或方法名需重命名 -
同名构造函数(PHP4 风格)被彻底废弃:如
class User { function User() { ... } }→ 必须改为__construct() -
短数组语法
[]已全面支持,虽非强制,但建议统一替换array(),提升可读性且避免嵌套时括号歧义 -
空合并运算符
??和太空船运算符可直接使用,无需 polyfill(除非还要兼容 PHP5)



















