编程语言
首页 > 编程语言> > php-对我的框架实施错误处理

php-对我的框架实施错误处理

作者:互联网

我将开始在我的框架中实施错误处理,并寻求有关如何构建它的一些建议.

首先让我解释一下我的框架是如何构建的:

我将框架启动与应用程序启动分开,因此应由专用于该类的类专门处理应用程序启动内引起的任何错误.

我的想法是让一个名为Core_Error_exception的类将错误报告设置为E_ALL,因为我的框架将严格限制PHP 5.3的错误,然后作为我的应用程序负载,我将在该类中运行关闭函数以恢复所有默认值值已更改.

我想做的是捕获所有E _ * _ NOTICE而不是E _ * _ ERROR的错误,然后在应用程序启动之前,我告诉类停止捕获错误,因为Application_Error_Exception将注意错误.

因此,我将需要一种跟踪所有错误(包括异常和触发器)的方法,然后在应用程序初始化之前显示框架调试页面.

我正在寻找的课程是这样的:

class Core_Error_Exception
{
    var $previus_error_level,$captured_contents;

    private $stack_trace = array();

    public function Core_Error_Exception()
    {
        $this->previus_error_level = error_reporting(-1);
        set_error_handler(array($this,'_collect_error'));
        set_exception_handler(array($this,'_collect_error'));
        ob_start(array($this,'_capture'));
    }

    public function _collect_error($errno, $errstr, $errfile, $errline, $context)
    {
        $this->stack_trace[] = array(
            array('name' => 'Error ID:',    'value' => $errno),
            array('name' => 'Error String:','value' => $errstr),
            array('name' => 'Error File:',  'value' => $errfile),
            array('name' => 'Error Line:',  'value' => $errline),
            array('name' => 'Context PRE:', 'value' => $context)
        );
        var_dump($this->stack_trace);
    }

    /*
     * _capture is used to capture pre_bufferd content.
     */
    public function _capture($content,$bitfeild)
    {
        if($bitfeild & PHP_OUTPUT_HANDLER_START)
        {
            $this->captured_contents = $content;
        }

        if($bitfeild & PHP_OUTPUT_HANDLER_CONT)
        {
            $this->captured_contents .= $content;
        }

        if($bitfeild & PHP_OUTPUT_HANDLER_END)
        {
            $this->captured_contents .= $content;
        }
        return false;
    }
}

因此,我想做的是能够以防跌倒的方式构造此类,以便将可能已触发的任何通知错误放入数组中,如果调用了E_ERROR通知,则此操作会自动运行在那一刻下来,以防止引起更多的错误.

我将使用一个小的html模板处理程序,在其中可以传递该上下文错误集,因此请注意错误和单个E _ * _ ERROR(如果适用).

与过去一样,构建此类的最佳方法是什么?我在执行错误跟踪/报告时遇到了一些困难.

更新:当前课程

如果触发了错误,例如trigger_error(‘test’,XXX);我希望能够跟踪所有错误,直到应用程序启动或触发了E_USER_ERROR.

有时我很难完全掌握PHP的错误系统,等等,有时我对如何构建它感到困惑,以至于它不易摔倒.

解决方法:

我不太确定自己在做什么,但是最直接的方法是按照以下方式使用嵌套的try块:

in Class Application:

    function run() {
        try {
            --do stuff
        } catch(AppException $e) {
            -- handle application-level exception
        }
        -- all other exceptions fall through


in Class Core:

    try {
        $core->init();
        $application->run(); <-- calls the above function
        $core->done();
    } catch(Exception $e) {
        --last chance exception handler
        --process exceptions the Application was unable to handle on its own
    }

为了能够以这种方式捕获php内置错误或trigger_error事件,还应该始终安装errors-to-exceptions handler.

标签:error-reporting,php
来源: https://codeday.me/bug/20191209/2096466.html