PHP面试题更新 2026-08-05

在基于 PHP 的项目中,你会采用怎样的设计方案来构建全局的异常处理与错误处理机制?

风险判断系统设计技术原理PHP

考察说明

考查对 PHP 错误与异常处理机制的理解及工程化落地能力

回答思路

  1. 【回答框架 1】PHP 中错误与异常是两套体系:错误由 error_reporting 与错误处理器接管,异常通过 try/catch 与异常处理器接管;需先区分二者,再统一收敛到全局入口。
  2. 【回答框架 2】全局错误处理通过 set_error_handler 注册回调,将 E_ALL 级别的错误转为 ErrorException 抛出,再交由统一异常管道处理;同时用 register_shutdown_function 捕获 fatal error,避免遗漏。
  3. 【回答框架 3】全局异常处理通过 set_exception_handler 注册处理函数,将未捕获异常统一记录日志、返回友好响应;框架或业务代码可自定义异常基类,区分业务异常与系统异常,分别处理。
  4. 【回答框架 4】生产环境需关闭 display_errors,开启 log_errors,将日志写入指定文件或对接日志系统;开发环境可保留展示便于调试,通过环境变量控制配置差异。
  5. 【回答框架 5】日志应包含时间、级别、消息、堆栈、URI、请求参数等上下文;风险点在于异常处理函数自身需避免二次抛错,且要防止敏感信息泄露。
  6. 【关键点 1】set_error_handler 可将错误转为异常,统一处理
  7. 【关键点 2】set_exception_handler 负责捕获未处理异常
  8. 【关键点 3】生产环境关闭 display_errors、开启 log_errors
  9. 【关键点 4】用 register_shutdown_function 兜底致命错误
  10. 【关键点 5】日志需包含堆栈与请求上下文
  11. 【易错点 1】异常处理函数内再次抛异常或输出错误,导致递归或响应输出失败
  12. 【易错点 2】将错误处理与异常处理混用,未区分 PHP 7 前后 Error 与 Exception 的继承差异
  13. 【易错点 3】在生产环境保留 display_errors,暴露路径与 SQL 等敏感信息