本文目录导读:

在 PHP 项目中,废弃函数需要根据具体废弃的函数来替换,以下是常见的废弃函数及其新版等效写法:
MySQL 扩展(已移除)
旧写法(已废弃)
// mysql_connect
$conn = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('dbname', $conn);
$result = mysql_query('SELECT * FROM users');
while($row = mysql_fetch_assoc($result)) {
echo $row['name'];
}
新写法(MySQLi)
// MySQLi 面向对象
$mysqli = new mysqli('localhost', 'user', 'pass', 'dbname');
$result = $mysqli->query('SELECT * FROM users');
while($row = $result->fetch_assoc()) {
echo $row['name'];
}
// 或 PDO
$pdo = new PDO('mysql:host=localhost;dbname=dbname', 'user', 'pass');
$stmt = $pdo->query('SELECT * FROM users');
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['name'];
}
字符串函数
ereg()/eregi() → 使用 preg_match()
// 旧
if (ereg('^[a-z]+$', $str)) { }
// 新
if (preg_match('/^[a-z]+$/i', $str)) { }
ereg_replace()/eregi_replace() → 使用 preg_replace()
// 旧
$result = ereg_replace('pattern', 'replacement', $string);
// 新
$result = preg_replace('/pattern/i', 'replacement', $string);
split() → 使用 preg_split() 或 explode()
// 旧
$parts = split(':', $string);
// 新
$parts = preg_split('/:/', $string);
// 或(简单分割)
$parts = explode(':', $string);
数组函数
each() → 使用 foreach
// 旧
while(list($key, $value) = each($array)) {
echo "$key: $value";
}
// 新
foreach($array as $key => $value) {
echo "$key: $value";
}
array_rand() 的 seed 参数已废弃
// 使用 mt_rand() 替代 mt_srand(12345); $random_key = array_rand($array);
对象和类
__autoload() → 使用 spl_autoload_register()
// 旧(已废弃)
function __autoload($class) {
include 'classes/' . $class . '.class.php';
}
// 新
spl_autoload_register(function($class) {
include 'classes/' . $class . '.class.php';
});
日期和时间函数
date()/time() 的某些用法
// 使用 DateTime 类
$date = new DateTime('now');
echo $date->format('Y-m-d H:i:s');
其他常用废弃函数
mysql_real_escape_string() → 使用参数化查询
// 旧
$safe = mysql_real_escape_string($input);
// 新(MySQLi)
$safe = $mysqli->real_escape_string($input);
// 或推荐使用 prepared statements
$stmt = $mysqli->prepare('INSERT INTO users (name) VALUES (?)');
$stmt->bind_param('s', $input);
define() 的 case-insensitive 参数已废弃
// 旧(已废弃)
define('CONST', 'value', true);
// 新(PHP 7.3+ 移除,请使用大写常量)
define('CONST', 'value');
快速替换工具
可以编写简单的 PHP 脚本替换:
// 批量替换废弃函数
function replaceDeprecatedFunctions($code) {
$replacements = [
'mysql_connect' => 'new mysqli',
'mysql_query' => '->query',
'ereg' => 'preg_match',
'eregi' => 'preg_match',
'split' => 'preg_split',
'each' => 'foreach',
];
$code = str_replace(
array_keys($replacements),
array_values($replacements),
$code
);
return $code;
}
最佳实践建议
- 使用 IDE 检测:PhpStorm 等 IDE 会自动标记废弃函数
- 查看 PHP 版本更新日志:在 PHP 官方文档 查看废弃函数列表
- 使用静态分析工具:如 PHPStan、Psalm 可以检测废弃函数使用
- 渐进式升级:先升级到 PHP 7.x,再过渡到 8.x,每个版本都有详细的废弃函数说明
替换时最重要的是测试,确保功能不变,建议先在开发环境全面测试后再部署到生产环境。