php - 作为错误处理程序或自定义错误处理类的异常?

标签 php exception error-handling

我经常与一位工作同事就在面向对象的PHP项目中“执行”错误处理的最合适方法进行辩论。

他认为我们应该继续使用Exceptions(旧版代码)。
在他的方法论中,您将具有如下方法:
private function doSomething() { if (condition) { throw new CustomException("error message"); } }
然后,您可以在try catch块中调用它,并将异常错误添加到错误数组中(然后可以根据需要将其输出)。

在上面的示例中,条件是一个 bool(boolean) 比较,对于该比较,可以接受真实或错误的响应。

这样的帖子:Error Handling in a PHP Class似乎同意这一立场。

我认为,因为true或false都是完全合理的响应,所以这是Exception的不当用法。假不是异常(exception),而是完全正常的。

因此,我开始创建一个自定义错误类,您将该类实例化到方法的顶部。然后,您方法中的所有错误都将添加到该实例的errors数组属性中。然后,您可以从方法中返回该实例,并可以调用该类的passesConditions()方法,该方法将根据是否有错误返回一个 bool(boolean) 值。

这种方法总是可扩展的,因为您可以以一致的方式记录所有故障(我很高兴您可以对Exceptions做类似的事情:)

那么我们中的一个比另一个更正确吗?如果是,为什么呢?

非常感谢

最佳答案

我开始认为基于异常的开发是不好的,尽管我还不确定。
但我不同意您的说法,“假和真都是有效结果”。对于普通 bool(boolean) 值当然是正确的,但是在代码上下文中,您正在测试。例如,如果要请求文件,则该文件必须存在,因此FileExists应该返回true。它可能返回false,该值本身有效,但在此文件加载器脚本的上下文中无效。
在另一个示例中,您可以发出HTTP请求并以整数形式获取其结果状态代码。尽管404、500和-1都是非常好的整数,但它们表示一种特殊的状态,假设您希望该URL返回正确的200 OK(或者可能是304 Not Modifyed)。

因此,您将错误记录到类中这一事实表明,即使您同意这也是一个错误的值。是否通过引发异常来解决这一问题是完全不同的讨论。

就我个人而言,我不太喜欢您的解决方案。我认为这会使代码困惑,因为您始终必须处理生成的对象(而异常可以在更高级别上捕获)。另外,如果您还想从函数中返回实际值,则该对象将成为对象,除非您使用包含实际结果的额外属性对其进行扩展,但是我认为您会迷失在自己的代码中,很快。

关于php - 作为错误处理程序或自定义错误处理类的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940903/

相关文章:

php - 如何使用php和html根据组合框选择中的更改自动更改输入文本框的值

PHP:需要一个 eval() 的替代方法来动态构建多维数组

android - list 文件中的问题

php - xampp错误报告

vba - 如何将Err.Raise错误传递给堆栈

javascript - onSubmit在PHP脚本开始时显示DIV

php - 使用 Apache 的 Flowplayer 安全流式传输

python - 在python中产生一个特定的异常

java - 获取奇怪的java.lang.NoClassDefFoundError异常

python - 在 Python Tkinter 中使用函数时添加图像