为什么这个异常不能被catch try方法处理


Why this Exception can not be handled by catch try method

当我初始化一个不存在的类时,它会抛出错误,我不想因为这个错误而停止。所以我尝试trycatch方法,但它仍然给我同样的错误,有人能解释为什么这个错误没有被捕获我试着

 try{$obj = new classname();}
 catch(Exception $e){ echo 'class does not exist, move on' ;}

致命错误:C:'WampDeveloper'Websites'localhost'webroot'index.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.
}