php 8 彻底移除了 mysql_*、each()、create_function()、mysqli::get_cache_stats()、gmp_random() 等函数,调用即报 fatal error;create_function() 必须替换为箭头函数或带 use 的匿名函数;each() 应优先改用 foreach;json_decode(”, true) 等行为变更需注意。
PHP 7 升级到 PHP 8 后报错,大概率是调用了被移除或严格化的函数/语法——不是环境没配好,而是代码本身踩了 PHP 8 的兼容性红线。
哪些函数在 PHP 8 中被彻底移除了?
PHP 8.0 移除了大量早已 @deprecated 的旧函数,且不再提供任何向后兼容层。一旦调用,直接抛出 Fatal error: Uncaught Error: Call to undefined function。
-
mysql_*系列(如mysql_connect):早该淘汰,PHP 7.0 就已移除,但部分遗留项目可能还通过扩展或封装间接依赖 -
mysqli::get_cache_stats():仅在极少数调试场景使用,PHP 8.0 彻底删除 -
create_function():因安全与性能问题被移除,替代方案必须用匿名函数 -
each():PHP 7.2 起废弃,PHP 8.0 删除;常见于老式while (list(, $v) = each($arr))遍历 -
gmp_random()、gmp_random_range():被gmp_random_bits()和gmp_random_range()(注意:同名但签名不同!)替代,旧调用会报错
create_function() 怎么安全替换成匿名函数?
这是升级中最常爆的点:它本质是 eval() 封装,PHP 8 直接砍掉。不能简单“改名字”,要注意作用域和参数绑定。
错误写法(仍想绕过):create_function('$a,$b', 'return $a + $b;') → 运行即 fatal
立即学习“PHP免费学习笔记(深入)”;