为什么catch try方法无法处理此异常

时间:2016-11-02 18:32:19

标签: php

当我发起一个不存在的类时,它会抛出错误,我不想被该错误停止。所以我尝试trycatch方法,但它仍然给我同样的错误,有人可以解释为什么没有抓住这个错误 我试过了

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

致命错误:班级'班级名称'在第4行的C:\ WampDeveloper \ Websites \ localhost \ webroot \ index.php中找不到

有人可以解释为什么无法捕获此错误吗?

他们是另一种捕捉和处理此类错误的方式吗?

更新

我们可以通过try catch方法捕获mysql致命错误,所以不要说尝试捕获方法无法处理致命错误

1 个答案:

答案 0 :(得分:0)

解决此问题的两种方法,使用自动加载器为每个不存在的对象运行自定义编写的函数,这样您就可以尝试包含"按需提交文件。

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
      • 类型错误
    • 异常

所以像这样的代码可以工作:

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.
}