有一点令人沮丧的尝试/捕获错误,我想知道我是否只是缺少一些东西。任何/所有输入非常感谢。我在Exception类上有几个扩展,似乎经过第二个扩展,catch不再有效。
IE PublicException扩展Exception / FileNotFoundException扩展PublicException;当我抛出一个FileNotFoundException时,它不会被一个PublicException catch块捕获,它应该是它的扩展名。
我有一个遵循这种模式的框架路由器
try {
// process page routes
// It is in this stage that one of my page controllers throws
// the FileNotFoundException
if (!$result) {
// Handle if the page request is not found
}
} catch (HttpException $e) {
// process
} catch (PublicException $e) { <--- This is failing to be caught
// process public exception
} catch (Exception $e) {
// Process Exception
}
然后我有:
class PublicException extends Exception {
}
class FileNotFoundException extends PublicException {
public function __construct($msg, $code = null, Exception $prev = null) {
// Custom Exception Handling
}
}
当我抛出一个新的FileNotFoundException时,catch(PublicException $ e)实际上并没有捕获异常,当然它应该是,因为FileNotFound是PublicException的扩展。如果我在我的错误块中抛出一个PublicException,它就会按预期工作。
我错过了什么?这在PHP世界中并不是什么新东西!感谢您的建议,并为长篇文章感到抱歉,试着详细说明。