我经常与一位工作同事就在面向对象的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/