我相信在正确编码的系统中 - 错误(作为错误或异常)是不可能的(除了DB/memcached服务器关闭导致查询失败).我们的代码不应该依赖任何假设才能正常工作,并且应该尽可能地作为防弹.
但是,为了确保我们的系统以最友好的方式处理问题,我们必须构建并实施某种"捕获系统",以确保如果出现任何问题,我们的服务器人员和最终用户都会照顾好.
为此,PHP提供了两种解决方案 - 错误和异常.错误由5个值组成,而异常由包含在对象中的5个值组成.两者都允许在构建应用程序时非常有用的回溯.
5个值是$ error_code,$ error_message,$ file,$ line,$ context
通常,在我们努力进行适当的OOP编程时,默认选择始终是追求对象 - 但在这种情况下,我不确定它们实际上是多么有益.通过使用异常,浪费了额外的内存以满足在对象中包装值的需要(这通常还需要包含异常类的额外文件).此外,您必须在TRY/CATCH {}块中包装您认为可能失败的任何代码.这使得错误处理方法对人为错误开放,因为开发人员可能无法解决故障点.为了安全防范这种情况,您可以使用set_exception_handler,它将传递任何未捕获的异常.关于异常处理程序的坏处是执行将在调用exception_handler之后停止 - 因此如果不在try/catch块中捕获,则不存在可恢复/忽略的异常.
另一方面,错误总是全局的,可以由set_error_handler设置的任何函数/类处理.这消除了对额外异常类,对象内存或try/catch代码行的需要.与异常一样,错误也伴随着构建错误代码(与异常不同),您可以使用它来继续脚本执行,以解决轻微或不重要的脚本问题.此外,大多数PHP函数都会触发错误,因此您不会违反语言流程.
因此,无论如何您必须支持错误处理(对PHP语言做),浪费额外代码和内存以及实现异常的目的是什么?我们只是盲目地这样做是因为它是对象形式的错误,还是应用程序设计中存在真正的好处,而正常错误无法承受我们?
我在这行之后停止阅读:
我相信在正确编码的系统中 - 错误(作为错误或异常)是不可能的(除了DB/memcached服务器关闭导致查询失败).
这就是异常的全部目的 - 作为管理代码中特殊情况的构造.
如果您将异常作为非常规普通程序流程的一部分,那么您做错了.
如果您不知道为什么异常对特殊情况有用,那么您可能需要花一些时间使用真正的OO语言.(提示:PHP不是真正的OO语言.)