当前位置:  开发笔记 > 编程语言 > 正文

在PHP5中,我应该使用Exceptions还是trigger_error/set_error_handler?

如何解决《在PHP5中,我应该使用Exceptions还是trigger_error/set_error_handler?》经验,为你挑选了3个好方法。

做任何一种方式的优点/缺点是什么?有一条正确的方法(tm)?



1> shadowhand..:

如果要为整个应用程序使用异常而不是错误,可以使用ErrorException和自定义错误处理程序(请参阅ErrorException页面以获取示例错误处理程序).这种方法唯一的缺点是非致命错误仍会抛出异常,除非被捕获,否则这些异常总是致命的.基本上,E_NOTICE如果你的error_reporting设置没有抑制它们,甚至会停止你的整个应用程序.

在我看来,使用ErrorException有几个好处:

    使用set_exception_handler,自定义异常处理程序将允许您显示好消息,甚至是错误.

    它不会以任何方式破坏现有代码...... trigger_error和其他错误函数仍然可以正常工作.

    这使得忽略触发E_NOTICEs和E_WARNINGs的愚蠢编码错误变得非常困难.

    您可以使用try/ catch来包装可能生成PHP错误的代码(不仅仅是异常),这是一种避免使用@错误抑制黑客的好方法:

    try {
        $foo = $_GET['foo'];
    } catch (ErrorException $e) {
        $foo = NULL;
    }
    

    如果要在发生任何未捕获的错误时向用户显示友好消息,可以将整个脚本包装在单个try/ catch块中.(请仔细执行此操作,因为只记录未捕获的错误和异常.)



2> 小智..:

你应该在"异常情况"中使用异常,也就是当你调用一个你应该期望它执行的方法doFoo()时,如果由于某种原因doFoo无法完成它的工作,那么它应该引发异常.

当发生故障时,许多旧的PHP代码会采用返回false或null的方法,但这使得调试变得困难,异常使得调试变得更加容易.

例如,假设你有一个名为getDogFood()的方法,它返回了一个DogFood对象数组,如果你调用了这个方法并且在出现错误时返回null,你的调用代码将如何判断是否返回了null,因为出现了错误还是没有狗食?

关于处理使用php内置错误日志记录的遗留代码库,您可以使用set_error_handler()函数覆盖错误日志记录,然后可以使用该函数重新抛出一般异常.

现在您已经将所有代码抛出了详细的异常,您可以自由决定如何处理它们,在代码的某些部分中,您可能希望捕获它们并尝试其他方法,或者您可以使用自己的日志记录函数来记录它们.可能会记录到数据库,文件,电子邮件 - 无论您喜欢哪个.简而言之 - 例外更灵活.



3> reefnet_alex..:

我喜欢使用异常的想法,但我经常涉及第三方库,如果他们不使用异常,你最终会遇到3-4种不同的问题方法!Zend使用例外.CakePHP使用自定义错误处理程序,大多数PEAR库使用PEAR :: Error对象.

我在这方面有一个真正的方法.在这种情况下,自定义错误处理程序路由可能是最灵活的.如果您只使用自己的代码或使用使用它们的库,则例外是一个好主意.

遗憾的是在PHP世界我们仍然拒绝痛苦死PHP4的,所以像例外,虽然他们可能代表最佳实践已经流行开来,而每个人都还在写的东西能在同时有4工作慢得令人难以置信5.希望这个崩溃现在已经结束,但到了它的时候,我们将会有6到5之间的紧张局势......

/我掌握在手中......

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有