假设使用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 如何在异常句柄中优雅地处理此异常?答案 0 :(得分:2)
如果class 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;
}
}
答案 1 :(得分:0)
好吧,你总是可以不删除pageClass.php ...
我假设这只是一个文件,不应该太难以确保它不会消失,就像你要确保其中包含__autoload函数的文件不会消失一样