php try catch 的疑惑

关于try catch的使用我一直很纠结,不知道哪些场景下该用,请各位大佬指点下,到底有没有必要用
image.png

阅读 2.6k
3 个回答

举个简单的except的栗子,当你写mysql 事务操作的时候,是不是会考虑回滚操作?什么情况下回滚?当补获db返回的异常的时候回滚。

如果是你上面的代码,我觉得就没必要,因为你这些异常都可以直接用 $this->error() 取缔了,但是如果封装到其他位置就有必要了,而且,每触发一次系统都是要有开销的。

通常,在我的业务中,控制器中是不会直接写业务逻辑之类的操作,都是新建一个 Service 用来处理业务,把控制器中收集到的参数传给 Service,然后在 Service 中的 handle 方法进行业务逻辑处理,处理成功后把值返回给控制器。

从现在开始控制前只关心 Service::handle 的成功,关于业务中的失败,就直接抛出业务异常,全部由全局的异常处理器进行处理,不用刻意去捕获 http 或者 mysql 异常。

新建一个业务异常类,BusinessException 继承自 LogicException ,当 Service 中出现意外情况时,直接抛出 BusinessException 异常,控制器中不需要去关心他,因为这样极易造成代码冗余,由全局异常处理器进行处理返回,判断异常实例时 BusinessException 异常时,就将里面的 code 和 message 返回出去,而且,因为这是我们自定义的一个异常类,我还可以携带其他参数,如果不是就是用默认的异常处理器。

同理,当用户未登录时,我们只需要创建一个 AuthException 异常,在必要时候抛出,由全局异常处理器处理即可,我们并不需要在单个业务中去关心,写一堆冗余代码去判断未登录需要怎么办。

当然,以上内容仅供参考,最好是结合自身的业务情况进行衡量。

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