This question already has answers here:
Can I try/catch a warning?
(11个答案)
2年前关闭。
在 PHP 7 中,可以抛出的任何对象的基本接口(interface)是Throwable。我们还为所有内部PHP错误提供了一个Error基类。但是为什么我不能捕获类似以下的错误:
a)
预期结果:“无法打开文件”
实际结果:PHP警告:fopen(not_exist_file):无法打开流:没有此类文件或目录
b)
预期结果:“Catch DivisionByZeroError”
实际结果:PHP警告:..中的零除
c)
预期结果:“捕获错误”
实际结果:PHP注意:..中的用户错误
我的PHP版本7.1.1(CLI)
(11个答案)
2年前关闭。
在 PHP 7 中,可以抛出的任何对象的基本接口(interface)是Throwable。我们还为所有内部PHP错误提供了一个Error基类。但是为什么我不能捕获类似以下的错误:
a)
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';
}
预期结果:“捕获错误”
实际结果:PHP注意:..中的用户错误
我的PHP版本7.1.1(CLI)
最佳答案
您列出的错误不会被捕获,因为它们不会被抛出。它们不是异常(exception),而是传统错误,自PHP代码开始以来就已成为triggered,这是在语言中引入异常(exception)和OOP之前的几年。
但是,您可以创建install an error handler来处理错误,方法是为它们创建并抛出 ErrorException
对象。
ErrorException
类的文档包括一个简单的示例。
关于php - 为什么PHP 7不会捕获某些错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51383257/