php - 为什么 PHP 7 没有捕捉到一些错误?
问题描述
在PHP 7中,可以抛出的任何对象的基本接口都是Throwable。我们还为所有内部 PHP 错误提供了一个Error基类。但是为什么我无法捕捉到以下错误:
一个)
try {
$file = fopen('not_exist_file', 'r');
} catch (\Error $e) {
echo 'Cannot open a file';
}
预期结果:“无法打开文件”
实际结果:PHP 警告:fopen(not_exist_file):打开流失败:没有这样的文件或目录
b)
try {
$result = 10 / 0;
} catch(\DivisionByZeroError $e){
echo 'Catch DivisionByZeroError';
} catch (\Throwable $e) {
echo 'Catch Throwable';
}
预期结果:'Catch DivisionByZeroError'
实际结果:PHP 警告:除以 ..
C)
try {
trigger_error('User error');
} catch(\Error $e) {
echo 'Catch error';
} catch (\Throwable $e) {
echo 'Catch throwable';
}
预期结果:'Catch error'
实际结果:PHP 注意:用户错误在..
我的 PHP 版本 7.1.1 (cli)
解决方案
您列出的错误没有被捕获,因为它们没有被抛出。它们不是异常,而是 PHP 代码从一开始就触发的传统错误,早在异常和 OOP 被引入语言之前几年。
但是,您可以安装一个错误处理程序,该处理程序可以通过为错误创建和抛出ErrorException
对象来处理错误。
该类的文档ErrorException
包括一个简单的示例来说明如何做到这一点。
推荐阅读
- java - Spring Boot 找不到 AutoConfigurationReportLoggingInitializer
- tensorflow - 如何将 tensorflow hub 预训练模型转换为可通过 tensorflow 服务使用
- microcontroller - PIC 32 波特率
- php - Imagemagik Fred 的 CYLINDERIZE 脚本不会将图像转换为 gif
- c++ - 如何在我的项目中同时包含 wincodec.h 和 d3dx10.h(或 d3dx11)文件
- c++ - 为什么类外成员模板定义需要重复其声明“requires-clause”
- php - 在视图中获取数据的未定义变量
- elasticsearch - 由于冲突而无法合并:[无法更新排除 [_source] 的设置]
- javascript - scrollHeight 计算与 display:flex 不同
- javascript - 从 nodejs 中的路径中删除最后一个文件夹,带有尾随且没有尾随 /