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

PHP中的例外 - Try/Catch或set_exception_handler?

如何解决《PHP中的例外-Try/Catch或set_exception_handler?》经验,为你挑选了2个好方法。

我正在我的系统中开发一些使用php异常类的多个子类的低端代码.基本上我有几个类别的例外.我想要做的是两件事.

    我需要在应用程序中触发的所有异常都在一个地方处理.

    我需要能够记录然后处理/生成视图以便用户接收有关应用程序的反馈.错误.

我想知道的是我应该使用某种try/catch封装应用程序吗?我根本不喜欢这个想法,这听起来像是一个非常糟糕的实现.我也不喜欢set_exception_handler的想法,除非我可以将函数设置为对象的方法.原因是如果我指定一个函数来处理异常,那么这将是应用程序中的第一个函数.其他一切都是对象的方法.

希望我已经提供了有关该方案的足够详细信息.我正在努力保持这种清洁并遵循最佳做法.这段代码将用于OSS所以我不想写它10次:)



1> Crescent Fre..:

    通过Front Controller脚本运行Web请求

    set_exception_handler尽早致电(别忘了考虑error_reporting()).set_exception_handler作为它的参数,php称之为"回调".你可以像这样传递一个对象方法:

    // $object->methodName() will be called on errors
    set_exception_handler(array($object, 'methodName'));
    

    包装您的调度代码try/catch以捕获任何会抛出异常的代码.您的代码的catch部分将捕获所有您自己的代码的异常,以及一些本地未生成异常的php错误(例如fopen或某些东西),这要归功于您的set_exception_handler上述调用.php手册说明:

    使用用户定义的函数无法处理以下错误类型:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,以及调用set_error_handler()的文件中引发的大部分E_STRICT.

    根据需要记录错误.

    在开发中创建一个错误页面模板("视图"),该模板对Exception对象("模型")进行操作,并为您打印整个堆栈跟踪.创建一个转到生产的不同模板.在您的环境中分支,例如:

    catch(Exception $e) {
        // log error as necessary here.
        if("in developement") {
            // $e would be available to your template at this point
            include "errortemplates/dev.php";
        } else {
            include "errortemplates/prod.php";
        }
    }
    



2> James Socol..:

有一个关于PHP的"回调"更具体的信息在这里.要使用静态方法,回调就像


要使用实例化对象中的方法,它是:


要使用全局函数,它只是:


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