当我初始化一个不存在的类时,它会抛出错误,我不想因为这个错误而停止。所以我尝试trycatch
方法,但它仍然给我同样的错误,有人能解释为什么这个错误没有被捕获我试着
try{$obj = new classname();}
catch(Exception $e){ echo 'class does not exist, move on' ;}
致命错误:C:WampDeveloperWebsiteslocalhostwebrootindex.php第4行没有找到Class 'classname'
谁能解释一下为什么这个错误不能被捕获?
是否有另一种方法来捕获和处理这类错误?
更新
我们可以通过try catch方法捕获mysql
致命错误,所以不要说致命错误不能通过try catch方法处理
有两种方法可以解决这个问题,使用一个自动加载器,为每个不存在的对象运行一个自定义编写的函数,这样你就可以尝试根据需要"包含"一个文件。
function autoload($objname){
if(is_readable(($f = '/path/to/class/'.$objname.'.php'))){
include $f;
} else {
throw Exception("$f does not exist");
}
}
spl_autoload_register('autoload');
new classname(); // try to load /path/to/class/classname.php
或者你可以升级到PHP 7,因为错误逻辑几乎没有改变:
层次结构
- Throwable
- 错误
- ArithmeticError
- DivisionByZeroError
- AssertionError
- ParseError
- TypeError
< - 异常/gh>
- 错误
所以像这样的代码可以工作:
try{
$obj = new classname();
} catch(Error $er){
echo 'class does not exist, move on';
} catch(Exception $ex){
echo 'a custom exception has been thrown:' . $ex->getMessage();
} catch(Throwable $t){
// Obsolete code, as Throwables are either Error or Exception, that were caught above.
}