登录后台

页面导航

本文编写于 105 天前,最后修改于 105 天前,其中某些信息可能已经过时。

今天在执行一段php代码时,使用了try catch抓取程序异常.但在执行的过程中代码中的错误
并没有捕获到.以下是错误捕获代码:


//php版本7.2  laravel版本5.6
//IntelligenceCampaignService  Service层并不是Model

try{
    $data = IntelligenceCampaignService::query()
                ->whereKey($taskId)
                ->first()
                ->toArray();
} catch (\Exception $e){
    dd($e->getMessage());
}

上方的代码段里可以明显看出IntelligenceCampaignService 使用了Model的操作方法,属于语法错误
是致命错误,会导致代码不能正常执行. 而\Exception 属于捕获异常,例如:

//$info->aa  有可能不存在,但不并属于致命错误,使用Exception捕获
//message : "Trying to get property 'aa' of non-object"


try {
    $info = IntelligenceCampaign::query()
        ->whereKey(100)
        ->first();
    $a = $info->aa;
    dd($a);
} catch (\Exception $e) {
    dd($e->getMessage());
}

所以对于捕获异常可以选择使用多个 catch 捕获不同级别的错误:


try{
    ***
} catch (\Error $e) { //捕获致命错误
    dd($e->message)
} catch (\Exception $e) { //捕获异常
     dd($e->message)
}

总结: 其实对于致命错误一般是由于语法错误导致的,是可以通过写测试实例检测出来的.而正常情况下使用
Exception即可.