本文目录导读:

- *mysql_ 系列函数(PHP 5.5+ 废弃,PHP 7.0+ 移除)**
- eregi() / ereg() 函数(PHP 5.3+ 废弃,PHP 7.0+ 移除)
- split() 函数(PHP 5.3+ 废弃)
- each() 函数(PHP 7.2+ 废弃)
- create_function() 函数(PHP 7.2+ 废弃)
- money_format() 函数(PHP 7.4+ 废弃)
- get_magic_quotes_gpc() 函数(PHP 7.4+ 废弃)
- hebrev() 和 hebrevc() 函数(PHP 7.4+ 废弃)
- is_real() 函数(PHP 7.4+ 废弃)
- fgetss() 函数(PHP 7.3+ 废弃)
- implode() 参数顺序(PHP 7.4+ 废弃)
- assert() 字符串参数(PHP 7.2+ 废弃)
- 检测废弃函数的方法:
- 替换建议:
在PHP开发中,废弃(Deprecated)函数需要及时替换以确保代码的安全性和兼容性,以下是常见的废弃函数及其替换方案:
*mysql_ 系列函数(PHP 5.5+ 废弃,PHP 7.0+ 移除)**
// 废弃写法
$conn = mysql_connect("localhost", "user", "pass");
mysql_select_db("database", $conn);
$result = mysql_query("SELECT * FROM users", $conn);
while ($row = mysql_fetch_array($result)) {
echo $row['username'];
}
// 替换为 MySQLi 面向对象
$conn = new mysqli("localhost", "user", "pass", "database");
$result = $conn->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
echo $row['username'];
}
// 或替换为 PDO
$pdo = new PDO("mysql:host=localhost;dbname=database", "user", "pass");
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['username'];
}
eregi() / ereg() 函数(PHP 5.3+ 废弃,PHP 7.0+ 移除)
// 废弃写法
if (eregi("^[a-z]+$", $username)) {
echo "Valid username";
}
// 替换为 preg_match()
if (preg_match("/^[a-z]+$/i", $username)) {
echo "Valid username";
}
split() 函数(PHP 5.3+ 废弃)
// 废弃写法
$parts = split(":", $string);
// 替换为 explode()(简单分隔符)
$parts = explode(":", $string);
// 或替换为 preg_split()(正则表达式)
$parts = preg_split("/:/", $string);
each() 函数(PHP 7.2+ 废弃)
// 废弃写法
while (list($key, $value) = each($array)) {
echo "$key: $value";
}
// 替换为 foreach
foreach ($array as $key => $value) {
echo "$key: $value";
}
create_function() 函数(PHP 7.2+ 废弃)
// 废弃写法
$func = create_function('$x', 'return $x * 2;');
echo $func(5); // 10
// 替换为匿名函数(闭包)
$func = function($x) {
return $x * 2;
};
echo $func(5); // 10
money_format() 函数(PHP 7.4+ 废弃)
// 废弃写法
$amount = 1234.56;
echo money_format('%.2n', $amount);
// 替换为 number_format()
$amount = 1234.56;
echo '$' . number_format($amount, 2);
get_magic_quotes_gpc() 函数(PHP 7.4+ 废弃)
// 废弃写法
if (get_magic_quotes_gpc()) {
$data = stripslashes($_POST['data']);
}
// 不再需要,使用 filter_input() 或直接处理
$data = filter_input(INPUT_POST, 'data', FILTER_SANITIZE_STRING);
hebrev() 和 hebrevc() 函数(PHP 7.4+ 废弃)
// 废弃写法 echo hebrev($hebrew_text); // 替换为使用 mb_* 函数 echo mb_convert_encoding($hebrew_text, 'UTF-8', 'ISO-8859-8');
is_real() 函数(PHP 7.4+ 废弃)
// 废弃写法
if (is_real($number)) { }
// 替换为 is_float() 或 is_double()
if (is_float($number)) { }
fgetss() 函数(PHP 7.3+ 废弃)
// 废弃写法
$handle = fopen("file.html", "r");
while (($line = fgetss($handle)) !== false) {
echo $line;
}
// 替换为 fgets() + strip_tags()
$handle = fopen("file.html", "r");
while (($line = fgets($handle)) !== false) {
echo strip_tags($line);
}
implode() 参数顺序(PHP 7.4+ 废弃)
// 废弃写法(参数顺序错误)
$string = implode($array, ",");
// 推荐写法(正确参数顺序)
$string = implode(",", $array);
// 或
$string = implode(", ", $fruit_array);
assert() 字符串参数(PHP 7.2+ 废弃)
// 废弃写法
assert('$a > $b');
// 替换为
assert($a > $b);
检测废弃函数的方法:
使用 PHP 内置函数检测
// 在开发环境开启错误报告
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 或使用 error_reporting(E_ALL & ~E_DEPRECATED) 忽略废弃警告
使用代码静态分析工具
# 安装 PHPStan composer require --dev phpstan/phpstan # 运行分析 vendor/bin/phpstan analyse src --level=8
使用 IDE 提示
- PhpStorm、VS Code 等 IDE 会自动提示废弃函数
在线工具
- https://phpcompatibility.com/
- PHP Compatibility Checker
替换建议:
- 优先使用 PDO 处理数据库操作
- 使用现代数组函数 替代旧函数
- 使用匿名函数 替代 create_function
- 使用正则表达式新语法(preg_*)
- 遵循 PSR 标准 规范代码
及时更新废弃函数不仅能避免安全隐患,还能提高代码性能和可维护性。