php:在异常处理程序中处理异常?
假设我们使用Exception类的自定义扩展来处理自定义异常, 例如: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
$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()方法中的code>将导致另一个异常。您必须捕获此异常,然后在没有该类的情况下执行某些操作
好吧,那将是一个简单的方法:),显然文件不会去任何地方。除非一个奇怪的网站所有者出现,并删除此文件纯粹出于无聊!试图掩盖每一个可笑的运行时错误都会让你成为一个可悲的程序员,你知道……好吧,创建了一个特定的测试用例,它确实有效,我想知道为什么它在实际应用中不起作用。
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;
}
}