在深入研究Doctrine的异常处理时,我偶然发现了这个代码示例,这个例子让我非常想知道这是否过度或者有些用处:
// Save entity
try {
$em->persist($someEntity);
$em->flush();
$this->logger->info("Saved someEntity");
} catch (DBALException $e) {
$this->logger->addError("DBALException [{code}]: {message}",
array('code' => $e->getCode(), $e->getMessage()));
} catch (PDOException $e) {
$this->logger->addError("PDOException [{code}]: {message}",
array('code' => $e->getCode(), $e->getMessage()));
} catch (ORMException $e) {
$this->logger->addError("ORMException [{code}]: {message}",
array('code' => $e->getCode(), $e->getMessage()));
} catch (Exception $e) {
$this->logger->addError("Exception [{code}]: {message}",
array('code' => $e->getCode(), $e->getMessage()));
}
我总是只使用通用异常(代码示例中的最后一个),并且想知道在大多数情况下这是否过度,除非有人想要以不同的方式处理一个已定义的异常?
答案 0 :(得分:3)
我认为这不是一种矫枉过正,因为在某些特定情况下,您需要了解通过保存实体产生的错误。
例如,如果您因创建自定义查询而遇到参数编号问题,则可能想知道是否存在PDO
问题或DBAL
问题,以了解更改代码的位置。< / p>
在许多情况下,您不需要所有这些异常,但在其他情况下,了解代码的哪一部分完全无法修复错误非常重要。
你发布了什么是一个关于如何捕获异常的罕见示例,但对于我来说,当你遇到一个非常深刻和复杂的问题时,要清楚地了解哪个异常生成以及从哪个供应商/依赖/图书馆