我看过很多教程,演示简单的尝试捕捉,比如打开文件的行为.但我从未见过一个大的“真实”的例子.有人可以向我提供一些他们有或将会使用例外的情况吗?是否真的需要扩展异常类才能抛出异常?最后,当抛出异常时,是否导致脚本退出(); ?或者,它是否记录并继续执行脚本?
我们在项目中广泛使用例外.
一个具体的实例是要求用户登录或注册的操作.我们在错误条件下使用异常来进行流量控制.如果当前用户没有登录,我们抛出异常.然后,异常处理程序将它们重定向到登录页面.
以我们的注册操作为例,我们扩展了这样的异常:
class Registration@R_404_159@ extends Exception {}
现在在我们的注册代码中的catch语句中,我们可以测试Registration@R_404_159@异常并相应地处理它.否则,当异常不是Registration@R_404_159@时,我们允许它冒泡,因为我们不感兴趣.
try { // do registration here } catch(Registration@R_404_159@ $e) { // handle the @R_404_159@ registration } catch(SomeOtherException $e) { // handle other errors like this... } // All other errors will not be caught and will bubble up
另一个例子是我们的包装类,开发者必须扩展.我们使用Reflection来确保子类已经正确地实现了他们的方法并提供了正确的界面.如果不是,我们通过例外通知该类的开发人员,让他们知道一个特定的接口或方法必须由子类提供.
编辑:
我可以听到关于“你不应该使用流量控制的错误处理”的评论!然而,对于上述项目,这是有必要的.
在程序的正常流程中,由于许多验证规则可能会失败,预期失败的注册,如密码太短.
然而,它是一个ajax应用程序,所以有可能在没有登录的情况下手动访问ajax url.这是一个例外,因此我们处理它.