在PHP中如何处理错误情况更优雅?

发布于 2022-09-12 13:40:22 字数 228 浏览 16 评论 0

假设现在有一个查询用户信息的函数getUserInfo(),参数是userId,如果传进来的userId不符合格式要求,或者根据这个userId查不到对应的用户信息,这时候函数有2种处理方式:

  1. 返回false或者null给调用者
  2. 抛出一个异常

以上两种方式哪种更好呢,为什么?有没有更好的错误处理方式?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

素衣风尘叹 2022-09-19 13:40:22

应该选择 抛出异常,因为使用返回 false 或者 null 的歧义太大。

比如,获取用户信息成功的情况下,返回的是一个数组,但是中途出错了,所以你返回了一个 false 或 null ,如果没有做判断,直接对返回信息进行 foreach 或者使用 array_* 方法,就会造成调用方发生未知异常,所以除了抛出异常,还要严格限定输入、输出值,让调用方减少疑惑。

function getUserInfo(int $id) : array;
function getUserInfo(int $id) : UserInfo;

补充:通过异常将错误的业务逻辑返回还可以解决深层次的问题,现在的业务流程往往都会有多层包裹,如果使用返回 false,null,void 这类值,还需要做层层判断,导致代码臃肿无比。而异常则可以选择性捕获终止业务等。

我要还你自由 2022-09-19 13:40:22

抛出异常,可以携带更多的信息

巴黎盛开的樱花 2022-09-19 13:40:22

出入参类型,只要你不是还在用 php5,都可以严格限制输入和输出的类型.如上层答主所说.
出错返回,最好是返回异常.但在早期的实际开发中,如果明确不管啥问题,错了就是错了,而且上层不关心里面出了啥错,就直接返回一个 false.后面也改成了异常,因为你会发现,一个函数返回值可能有很多类型.如果没有文档留存,接手的人,看函数签名完全不知道你这个函数使用起来,会有哪一种情况没有处理掉.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文