PDO的try / catch块太多

时间:2011-10-01 12:49:27

标签: php error-handling pdo try-catch

在控制器类文件中,大多数方法函数包括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”吗?

3 个答案:

答案 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) {

}