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

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

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

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

阅读 2.5k
3 个回答

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

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

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题