php:处理异常处理程序中的异常?

假设使用Exception类的自定义扩展来处理自定义异常,

像这样举例如:

$testObject = new testClass();

和这样的自动加载:

function __autoload($class_name) {
    $file = $class_name.'.php';
    if (file_exists($file)) {
        include $file;  
    }else{
        throw new loadException("File $file is missing");
    }
    if(!class_exists($class_name,false)){
        throw new loadException("Class $class_name missing in $file");
    }
    return true;
}

try {
    $testObject = new testClass();
}catch(loadException $e){
    exit('<pre>'.$e.'</pre>');
}

文件testClass.php不存在,因此使用以下消息调用loadException:
文件testClass.php丢失了. (以及所有其他细节……行号等)

一切都很好,直到我决定隐藏所有错误,而是显示404页面(或500页…),所以我自然想添加一个loadErrorPage函数.

class loadException {

...

    function loadErrorPage($code){
        $page = new pageClass();
        echo $page->showPage($code);
    }
}

...

try {
    $testObject = new testClass();
}catch(loadException $e){
    $e->loadErrorPage(500);
}

但这有一个明显的问题,如果缺少testClass.php和pageClass.php文件,则会显示致命错误,而不是首选的404页面.

我很困惑:S
如何在异常句柄中优雅地处理此异常?

最佳答案 如果类pageClass不存在且无法由您的自动加载器加载$page = new pageClass();在您的方法loadErrorPage()将导致另一个异常.您必须捕获此异常,然后在没有该类的情况下执行某些操作.

function loadErrorPage($code){
  try {
    $page = new pageClass();
    echo $page->showPage($code);
  }
  catch(Exception $e) {
    // header(...500);
    echo 'fatal error: ', $code;
  }
}
点赞