Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.0k views
in Technique[技术] by (71.8m points)

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

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...