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.【強制】捕獲異常是為了處理它,不要捕獲了卻什么都不處理而拋棄之,如果不想處理它,請將該異常拋給它的調用者。最外層的業務使用者,必須處理異常,將其轉化為用戶可以理解的內容;