php - 异常捕获 : when not to catch them?

标签 php oop zend-framework exception

我在 PHP 的 Zend Framework 中为我的应用程序编写了许多小型库(一组类)。我也一直在库的方法本身中捕获这些异常并将它们记录到一个文件中。

然后我突然遇到一个问题,即我使用这些库的主应用程序不会因错误而退出,即使在我预期它们会因 fatal error 而退出的情况下也是如此。这个问题是下面的代码一直执行到最后 - 它不应该有。

捕获并记录库类中的大部分错误(特殊情况除外)似乎不是一个好习惯。他们应该总是按原样抛出错误吗?这是一个正确的假设吗?

如果有人能帮我回答这个问题,我将不胜感激。

最佳答案

在任何语言中,异常的一般哲学是它们传达异常情况。您应该相应地使用它们。

如果您最终用 try block 围绕每个函数调用,则有问题。异常被精确地设计成使错误处理合乎逻辑,而不需要程序员跟踪所有可能的错误路径。因此,您应该在可以有意义地响应的那些点上准确地捕获异常。

如果您想不出比中止和传播错误更好的方法,那么捕捉异常就没有意义了。另一方面,如果存在一些您可以明智地使用react的错误,捕获这些错误,然后重新抛出其他任何错误。

一个典型的例子是,如果您要处理大量文件。如果解析逻辑中的任何地方都存在错误,您将无能为力,即使解析可能会导致许多函数调用失败。但是,在主循环中,您可以尝试解析每个文件,如果有异常,您会捕获异常,跳过该文件并继续处理下一个文件。

如果您正在编写一个库函数,您可能希望在整个函数周围有一个最后的 try block ;不过,这在某种程度上取决于您。只需清楚地记录用户必须从您的库中获得哪些异常。

关于php - 异常捕获 : when not to catch them?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7372732/

相关文章:

php - 在 ZF2 项目中启用 Doctrine 2 缓存

php - "Insert into select from group by count on duplicate update"组合

php - 使用 jQuery 发布屏幕宽度

java - 什么是子类

javascript - 自定义 javascript 类和私有(private)变量作用域问题

php - 数据映射器模式 : Complexe query from Service Layer

zend-framework - Zend 框架 : Controller Plugins vs Action Helpers

phpStorm 在一些 .ctp 文件中显示 php 语法

使用数据库连接的 PHPUnit 模拟函数

c++ - 这个构造函数是可以接受的做法吗?