Nik*_* K. 2 try-catch laravel laravel-5 laravel-5.5
我正在使用 laravel 5.5 我编写了一个带有 try 和 catch 异常的代码。但是 Try/catch 不是管理异常处理。异常执行Exception/handle.php
这是我正在关注的代码
try {
App\Models\justDoIt::find(1);
} catch (\Exception $ex) {
dd($ex);
report($ex);
return false;
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么不执行 catch 并且从handle.phpin显示错误report()
这是handle.php代码
public function report(Exception $exception) {
echo "Handle";
dd($exception);
parent::report($exception);
}
Run Code Online (Sandbox Code Playgroud)
结果
Handle
FatalThrowableError {#284 ?
#message: "Class 'App\Http\Controllers\App\Models\justDoIt' not found"
#code: 0
#file: "D:\xampp7\htdocs\homeexpert_nik\app\Http\Controllers\HomeController.php"
#line: 21
#severity: E_ERROR
trace: {?}
}
Run Code Online (Sandbox Code Playgroud)
结果将显示在 handle.php 文件中。
您的代码抛出错误,而不是异常。您正在尝试使用一个不存在的类,而 PHP 通过抛出一个FatalThrowableError.
在 PHP 5 中,此代码会导致在浏览器中呈现致命错误消息,但是在 PHP 7(Laravel 5.5 需要此功能)中,PHP 现在会像异常一样抛出错误。这允许应用程序捕获这些错误,就像使用 try/catch 块的异常一样。
错误逃离 try/catch 块的原因是错误不是Exception,也不是它的子级。被抛出的对象是一个Error. 无论是Exception和Error类实现一个共同的接口,Throwable。
Throwable
- Exception
- Error
Run Code Online (Sandbox Code Playgroud)
Laravel 的异常处理程序被编写来捕获这两个类,以便显示您看到的错误页面。
如果您将代码更改为以下内容,您会发现} catch (Throwable $e) {应该执行该块:
try {
App\Models\justDoIt::find(1);
} catch (\Exception $ex) {
dd('Exception block', $ex);
} catch (\Throwable $ex) {
dd('Throwable block', $ex);
}
Run Code Online (Sandbox Code Playgroud)
有关这方面的更多信息,请参见此处。
补充一点:如果您想知道您的代码有什么问题,那是因为您可能忘记了use控制器中的模型类:
use App\Models\justDoIt;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5766 次 |
| 最近记录: |