在控制器类文件中,大多数方法函数包括try / catch块,如下所示:
try
{
$stmt = $this->prepare($sql);
$stmt->execute($params);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
//foreach() or so on...
}
catch (Exception $e)
{
//bunch of code...
//save error into database, etc.
//error into json and pass to view file
}
catch块中有很多代码,有没有办法减少它。可以在catch块中添加“throw exception”吗?
答案 0 :(得分:3)
是的,确实如此。亲自尝试一下。您总是可以在catch块中抛出一个新的Exception,或者重新抛出相同的异常。
try
{
// ...
}
catch (Exception $e)
{
// do whatever you want
throw new Your_Exception($e->getMessage());
// or
throw $e;
}
答案 1 :(得分:0)
我不知道“一堆代码”是什么。我不确定我是否相信你。如果你在一个捕获区中有那么多的事情,你做错了什么。
如果你有AOP可用,我会把这种代码放到一个方面。
“数据库错误”可能会抛出自己的异常。那会怎么样?
我在这里看到的唯一必要步骤是路由到错误视图。
重新抛出异常有什么作用?它只是在其他地方推卸责任。如果不需要完成所有这些步骤,并且你要做的就是重新抛出,那么根本不要抓住它。让异常泡沫到达真正处理的位置。
答案 2 :(得分:0)
你不应该抓住Exception
。这太普遍了。使用try块上的多个catch语句捕获每种特定类型的Exception:
try {
} catch(PDOException $err) {
} catch(DomainException $err) {
}