处理对象中的复杂结果 - 异常?

时间:2010-01-07 19:18:30

标签: php oop exception

使用对象处理函数的复杂结果的一般方法是什么?一个简单的方法可能会返回true或false,这就是我需要知道的全部内容。一个更复杂的方法可能返回true或false,但是我可能想要从类中获取更多信息,例如它失败的原因(可能有几个原因)。

我可以用一个例外来做,但我在某些地方读过,使用“正常”函数的异常并不是一个好习惯。此外,由于抛出异常会破坏对象,因此我无法对其进行任何其他操作,因此如果我想继续使用该对象,则异常将无效。在我看来,当事情确实是错误的时候应该抛出异常,而不是预期的,可恢复的错误。

所以,另一种方法是在运行方法后得到一个result属性,如果该方法返回false,我可以询问它的结果状态是什么。这是这样做的吗?

3 个答案:

答案 0 :(得分:1)

明显的解决方案:返回一个数组,如("success" => false, "explanation" => "saw a mouse and ran screaming like a little girl", "solution" => "call an exterminator")

答案 1 :(得分:0)

异常不会破坏对象,但是如果你在没有引用该对象的地方捕获异常,那么你可以释放该对象 - 它仍然存在,直到垃圾回收。

如果您创建自己的异常类,甚至可以将相关对象作为成员添加到异常中,因此该对象可用于处理异常的位置。

此规则的例外是在对象构造函数中抛出异常时。然后,有问题的对象从未在第一时间创建

Exceptions与其他错误机制的使用与Exceptions一样久远。例外是用于处理错误的 a 方法,并且在许多情况下它们运行良好并且导致代码比不使用它们时更清晰。

它们是否是针对特定问题的良好解决方案,部分取决于经验,因此您必须尝试使用​​它们来学习它们。

答案 2 :(得分:0)

我建议你始终保持方法签名的可预测性,即总是返回相同的类型(无论是数组,布尔值还是其他任何东西。)

我认为the example of validating with Zend_Validate通过区分结果与最终错误来为您的问题提供合理的解决方案。