1.【**建议**】代码中有多处需要判断是否有未知错误或者需要避免页面级错误的时候,建议使用异常处理捕获错误(前置检查项除外)
~~~
try {
$result = Db::name('user')->find();
if (!$result) {
throw new \think\Exception('未查询到任何信息', 100006);
}
...
} catch (\Exception $e){
$msg = $e->getMessage();
$this->error($msg);
}
return $this->success('执行成功!');
~~~
2.【**强制**】需要用到数据库事务的方法,必须使用异常处理方式,catch 异常后,一定要注意手动回滚事务
~~~
// 启动事务
Db::startTrans();
try {
$info_result = Db::table('think_user_info')->where('uid',1)->update(['nickname'=>'姓名']);
$delete_result = Db::table('think_user')->where('id',1)->update(['name'=>'姓名']);
if (!$find_result || !$delete_result){
throw new \think\Exception('语句执行错误', 100006);
}
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
$msg = $e->getMessage();
return $this->error($msg);
}
~~~
3.【强制】异常不要用来做流程控制,条件控制,因为异常的处理效率比条件分支低;
4.【强制】捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容;