我试图做一个非常基本的异常尝试捕获,但它没有捕获。
$id =0;
try {
$question = $this->model->find($id); // will not find anything since $id = 0
$question->delete(); // throw an exception
return true;
} catch (\Exception $e) {
dd ('hello'); // should end up here, but no?!?!?
} catch (FatalThrowableError $f) {
echo ("fatal"); // or here... but no.
}
但是捕获并没有捕获"。我在浏览器中收到一个致命错误,说明在null对象上调用了delete。但这正是我试图做的事情:对空对象执行删除(id = 0不在DB中),以测试异常。
我试过了
use Symfony\Component\Debug\Exception;
use Symfony\Component\Debug\Exception\FatalThrowableError;
或只是
Exception;
FatalThrowableError;
此外,拥有\ Exception $ e或Exception $ e(有或没有)并没有改变任何东西。
请注意,如果我添加一行如$ foo = 4/0,我会进入Exception部分(dd(hello))。
in .env APP_DEBUG = true,APP_LOG_LEVEL = debug
我在Windows 7上使用PHP 7.0.10在Laravel 5.5上。
答案 0 :(得分:3)
http://php.net/manual/en/language.errors.php7.php
由于
Error
层次结构不从Exception
继承,因此使用的代码catch (Exception $e) { ... }
阻止处理未捕获的异常 PHP 5将发现这些块不会捕获这些Errors
。catch (Error $e) { ... }
块或set_exception_handler()
处理程序是必需的。
您还可以catch (\Throwable $e) {}
同时考虑Error
和Exception
类型。