处理错误的最佳方法

时间:2010-11-19 17:35:18

标签: php error-handling

我希望你们能帮我解决这个问题:如何处理错误以及返回什么? 我所做的,大部分时间,是让我的函数/方法返回两个可能的值。成功时的预期值,如果失败则为FALSE。这样我就可以使用:

if(function()) { ... } else { ... }

我不喜欢使用异常,因为通常它们会打印一些内容并中断应用程序的正常运行。当然,我可以让他们返回一些内容并显示错误警报。但是工作太多了。而且我不喜欢口袋妖怪试图抓住它们。 (Awsum话题,顺便说一句)

我关注的另一件事是编写“错误处理”驱动的代码。我们知道,用户几乎可以做任何事情来导致意外情况,并且编码期待这些错误太累人而且坦率地说,这让我变得偏执。 XD

我为任何英语拼写错误道歉(我不经常写)。 感谢您阅读此问题。 :d

PS:我读到了关于防御性编程和其他问题,但他们并没有完全回答我的疑问。

3 个答案:

答案 0 :(得分:3)

也许你不会发现我的答案很有用,因为我不是一个php开发人员,无论如何我会尝试给你一些提示,因为错误处理辩论在任何编程语言中都很常见。

1)首先尝试避免实际需要进行错误处理。这确实意味着尝试以尽可能少的错误条件进行编码。一个简单的例子:常识是尝试清空空集合不应该引发错误。

2)区分支持的失败,而不是不支持的失败。支持的故障是您实际想要作为程序逻辑的一部分进行跟踪和处理的错误情况。不支持的故障将是一个错误条件,实际上是一个代码错误。例如:您正在尝试在地图中查找元素,并且它是程序逻辑的一部分,特定元素应该在那里。没有任何意义可以添加代码来测试元素是否在那里并且如果不存在则引发错误:你假设它在那里。

在您理解了这两点之后,我很确定您会理解为什么异常对于生成更清晰,更高效的代码非常有用。诀窍是:使代码尽可能少地引发异常(再次:明确支持和不支持的错误条件以选择实际需要的异常)并仅在最外部范围捕获它们,其中应用程序的用户与之交互1)应该警告,2)应该决定做什么。在大多数情况下,以编程方式捕获没有用户交互的重复是一件坏事,因为它使得开发人员认为捕获异常是有效的,就像有条件地执行某些操作(if-then-else)当出现错误条件时案件。在抛出异常之前,异常不会对您的应用程序造成任何开销。

答案 1 :(得分:0)

您是否尝试过使用PHP的错误记录工具? http://php.net/manual/en/book.errorfunc.php

然后,您可以使用error_log()之类的东西将自定义错误发送到您想要的任何日志文件。

答案 2 :(得分:0)

您应该考虑使用Exceptions。如果你不想,他们不会打印任何东西。至少这可以更好地分离您的实际代码和错误处理。

你是对的,让一个函数返回一个值或者在错误时返回false并不是最好的风格(是的,我知道这可能已经做了很多)。

如果您想了解有关良好编码习惯的更多信息,建议您阅读Clean Code by Robert Martin