假设使用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;
}
}