PHP面试题更新 2026-08-03

在 Swoole 开发中,异常处理是如何进行的?请阐述你的处理方案。

考察说明

考察对 Swoole 中异常处理机制的理解及实际应用能力。

回答思路

  1. 【回答框架 1】Swoole 中异常分为 PHP 层异常和 Swoole 层错误。PHP 异常(如 Exception、Error)可通过 try-catch 捕获,而 Swoole 的错误(如连接失败、超时)通常通过回调函数的返回值或错误码获取,或通过 set_error_handler 和 set_exception_handler 全局处理。
  2. 【回答框架 2】在协程环境下,异常在协程内部抛出,若未捕获会导致协程中断,并可能影响整个进程。建议在每个协程的入口处使用 try-catch 包裹,或使用 Swoole 提供的 Coroutine\defer 注册清理操作,确保异常被正确处理。
  3. 【回答框架 3】对于异步回调(如 onReceive、onRequest),异常需在回调内部捕获,否则会冒泡到事件循环,导致进程退出。可以使用全局异常处理器统一记录日志,并返回错误响应。
  4. 【回答框架 4】开发中可自定义异常类,区分业务异常和系统异常,并通过异常码和日志系统实现快速定位。同时结合 Swoole 的 Worker 进程模型,注意异常处理不会影响其他 Worker。
  5. 【关键点 1】区分 PHP 异常和 Swoole 错误,PHP 异常用 try-catch,Swoole 错误通过错误码或回调返回值处理。
  6. 【关键点 2】协程内异常需在协程内捕获,否则会导致协程中断。
  7. 【关键点 3】全局异常处理器可统一记录日志和转换错误响应。
  8. 【关键点 4】异常处理需考虑 Worker 进程隔离,避免影响其他请求。
  9. 【易错点 1】不能只依赖 try-catch 而忽略 Swoole 错误码,否则会遗漏异步错误。
  10. 【易错点 2】协程内未捕获的异常会中断协程,可能影响同一 Worker 的其他协程。
  11. 【易错点 3】全局异常处理器可能吞掉异常详情,需确保日志记录完整。