假设现在有一个查询用户信息的函数getUserInfo()
,参数是userId,如果传进来的userId不符合格式要求,或者根据这个userId查不到对应的用户信息,这时候函数有2种处理方式:
- 返回
false
或者null
给调用者 - 抛出一个异常
以上两种方式哪种更好呢,为什么?有没有更好的错误处理方式?
应该选择 抛出异常,因为使用返回 false 或者 null 的歧义太大。
比如,获取用户信息成功的情况下,返回的是一个数组,但是中途出错了,所以你返回了一个 false 或 null ,如果没有做判断,直接对返回信息进行 foreach
或者使用 array_*
方法,就会造成调用方发生未知异常,所以除了抛出异常,还要严格限定输入、输出值,让调用方减少疑惑。
function getUserInfo(int $id) : array;
function getUserInfo(int $id) : UserInfo;
补充:通过异常将错误的业务逻辑返回还可以解决深层次的问题,现在的业务流程往往都会有多层包裹,如果使用返回 false,null,void 这类值,还需要做层层判断,导致代码臃肿无比。而异常则可以选择性捕获终止业务等。