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

php:在异常处理程序中处理异常?,php,exception-handling,Php,Exception Handling,假设我们使用Exception类的自定义扩展来处理自定义异常, 例如: $testObject = new testClass(); 还有像这样的自动加载: function __autoload($class_name) { $file = $class_name.'.php'; if (file_exists($file)) { include $file; }else{ throw new loadException("File

假设我们使用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和pageClass.php文件丢失,那么将显示一个致命错误,而不是首选的404页面

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

好吧,您可以始终不删除pageClass.php


我假设这只是一个文件,要确保它不会消失应该不太难,就像你要确保带有自动加载功能的文件不会去任何地方一样。

如果
class pageClass
不存在,并且不能由你的自动加载程序加载
$page=new pageClass()将导致另一个异常。您必须捕获此异常,然后在没有该类的情况下执行某些操作


好吧,那将是一个简单的方法:),显然文件不会去任何地方。除非一个奇怪的网站所有者出现,并删除此文件纯粹出于无聊!试图掩盖每一个可笑的运行时错误都会让你成为一个可悲的程序员,你知道……好吧,创建了一个特定的测试用例,它确实有效,我想知道为什么它在实际应用中不起作用。
class loadException {

...

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

...

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