在PHP 7 中,可以抛出的任何对象的基本接口是Throwable。我们还有一个用于所有内部 PHP 错误的Error基类。但是为什么我无法捕捉到以下错误:
一种)
try {
$file = fopen('not_exist_file', 'r');
} catch (\Error $e) {
echo 'Cannot open a file';
}
Run Code Online (Sandbox Code Playgroud)
预期结果:'无法打开文件'
实际结果:PHP 警告:fopen(not_exist_file):无法打开流:没有这样的文件或目录
b)
try {
$result = 10 / 0;
} catch(\DivisionByZeroError $e){
echo 'Catch DivisionByZeroError';
} catch (\Throwable $e) {
echo 'Catch Throwable';
}
Run Code Online (Sandbox Code Playgroud)
预期结果:'Catch DivisionByZeroError'
实际结果:PHP 警告:在 ..
C)
try {
trigger_error('User error');
} catch(\Error $e) {
echo 'Catch error';
} catch (\Throwable $e) {
echo 'Catch throwable';
}
Run Code Online (Sandbox Code Playgroud)
预期结果:'Catch error'
实际结果:PHP 注意:用户在 ..
我的 PHP 版本 7.1.1 (cli)
您列出的错误不会被捕获,因为它们不会被抛出。它们不是异常,而是由 PHP 代码从一开始就触发的传统错误,比该语言中引入异常和 OOP 早了很多年。
但是,您可以安装一个错误处理程序ErrorException,它可以通过为错误创建和抛出对象来处理错误。
该类的文档ErrorException包含一个如何执行此操作的简单示例。