PHP 常见错误类型详解:从 Deprecated 到 Fatal Error

小岛来信
小岛来信
发布时间:2026-10-16| 5人浏览过
原创

在 PHP 开发中,了解不同级别的错误是编写健壮代码的基础。从影响不大但需警惕的 "deprecated",到可能导致脚本中断的 "fatal error",本文将梳理这些错误类型的定义、触发条件及处理建议。

PHP 错误的主要分类

PHP 的错误机制涵盖了从代码规范提示到程序崩溃的各种情况。理解这些层级有助于我们区分哪些需要立即修改,哪些仅作为提醒。通常,我们可以将常见的运行时错误分为以下几个关键层级:

第1步:识别 Deprecated(弃用/不推荐)错误

目的:了解为何会出现“不推荐”提示并进行兼容处理。
入口:旧版本函数或语法在新版 PHP 中的表现。
动作:检查报错信息中的 Deprecated 标识。
参数/现象:例如在 PHP 5 中使用 ereg 系列正则函数时触发此类错误。

这是最低级别的错误提示,表示该功能已被标记为“不推荐”或“不建议使用”。虽然它不会阻断当前脚本的运行流程,但意味着该函数在未来版本中可能会被移除或行为改变。建议在发现此类错误时,尽快将其替换为官方推荐的替代方案(如将 ereg 替换为 preg)。

第2步:排查 Notice(通知级)错误

目的:修正代码中的不规范写法,消除冗余提示。
入口:变量未定义或数组索引格式错误。
动作:查找 Notice 标识并初始化变量或添加引号。
重要参数:如直接使用未初始化的变量,或使用字符串作为数组键但未加引号。

许多人误以为这是“通知”,但在 PHP 体系中它属于“通知级错误”。常见场景包括:
1. 变量未初始化:直接使用未经定义的变量。
2. 数组索引未加引号:当数组索引是字符且未加引号时(如 $arr[foo]),PHP 会先尝试查找名为 foo 的常量。如果常量不存在,再将其视为变量 'foo'。这种做法容易引发意外,建议始终对字符串索引加上引号。

此类错误通常不影响程序的正常逻辑结果,但为了代码规范和避免潜在风险,应保持变量先定义后使用,并确保数组键名格式正确。

第3步:修正 Warning(警告级)错误

目的:修复导致功能失效或结果不符合预期的严重逻辑错误。
入口:函数参数错误、文件包含失败等。
动作:根据 Warning 提示调整函数调用参数或检查依赖。
可观察状态:脚本继续执行,但输出结果可能错误或包含空值。

警告级别的错误表明出现了不太恰当的语法或操作,这会导致程序得不到预期结果。例如调用函数时传入的参数数量或类型不匹配。与 Notice 不同,Warning 往往直接影响了业务的正确性,必须修改代码才能恢复功能。

第4步:处理 Fatal Error(致命错误)

目的:解决导致进程立即终结的根本性故障。
入口:调用不存在的函数、类,或内存耗尽。
动作:检查调用链,确保函数/类存在且语法无误。
完成判断:脚本不再抛出致命异常,能够正常运行至结束。

这是最高级别的运行时错误。一旦发生,PHP 进程会立即终止,其后的所有代码均不再执行。常见原因包括调用了未定义的函数或类。这种错误非改不可,否则程序完全瘫痪。

第5步:解决 Parse Error(语法解析错误)

目的:纠正代码结构上的根本性错误。
入口:代码中存在缺失的分号、括号或引号不匹配。
动作:检查报错行及其上一行的语法结构。
差异点:Parse Error 发生在语法检查阶段,代码甚至无法开始运行,这与上述运行期间的错误有本质区别。

语法解析错误属于编译/解析阶段的错误。例如代码末尾少了一个分号,或者字符串中的引号没有成对出现。这类错误会导致 PHP 引擎直接拒绝执行脚本,通常需要通过编辑器的高亮功能仔细检查引号和括号的配对情况。

常见错误代码示例对照

以下代码片段演示了上述各种错误在实际编码中的触发场景:

// 1. Deprecated (PHP5) / Fatal Error (PHP7+)
$date = date('Y-m-d');
if(ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$date,$regs)){
    echo $regs[1]."-".$regs[2]."-".$regs[3];
}else{
    echo "没有匹配到";
}
// 注意:ereg 在 PHP 5 中报 Deprecated,在 PHP 7 中直接报 Fatal error

// 2. Notice
if($i > 2020){ // $i 未定义
    echo '$i没有初始化!!!',PHP_EOL;
}

// 3. Warning (数组索引未加引号)
$arr = array('arr'=>1, 2, 3);
echo $arr[arr]; 

// 4. Warning (参数不匹配)
$res = array_sum($arr, 1); 
// array_sum 期望一个数组,此处传入了两个参数且第二个参数非数组

// 5. Fatal error (调用未定义函数)
echo fun(); 

// 6. Parse error (引号未闭合)
echo "最高级别错误'; 

配置显示所有错误级别

如果在调试过程中未能看到上述完整输出,可能是因为服务器配置限制了错误的显示。请检查 php.ini 配置文件,确保包含以下设置以开启所有级别的错误报告:

error_reporting=E_ALL | E_STRICT
display_errors=On
  • error_reporting:指定要报告的错误级别。E_ALL | E_STRICT 表示显示所有可能的错误和严格标准提示。
  • display_errors:决定是否将错误消息直接输出到浏览器。生产环境建议设为 Off,并通过日志记录错误;开发环境应设为 On 以便即时调试。

以上就是关于 PHP 常见错误类型总结的详细内容,更多关于 PHP 错误排查的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。