码迷,mamicode.com
首页 > Web开发 > 详细

PHP set_error_handler()函数的使用之二

时间:2016-03-24 18:41:51      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:set_error_handler   phpwind   

phpWind的前端控制器AbstractWindFrontController.php中是这样使用的,



/**
     * 创建并执行当前应用,单应用访问入口
     */
    public function run() {
        $this->_app = $this->createApplication($this->_config[‘web-apps‘][$this->_appName],
            WindFactory::_getInstance());
        
        set_error_handler(array($this, ‘_errorHandle‘), error_reporting());//调用了当前抽象类中的_errorHandle()方法
        set_exception_handler(array($this, ‘_exceptionHandle‘));
        if ($this->_config[‘isclosed‘]) {
            throw new Exception(‘Sorry, Site has been closed!‘);
        }
        if ($this->_chain !== null) $this->_chain->getHandler()->handle(‘onCreate‘);
        /* @var $router WindRouter */
        $router = $this->_app->getFactory()->getInstance(‘router‘);
        $router->route($this->_app->getRequest());
        
        if ($this->_chain !== null) $this->_chain->getHandler()->handle(‘onStart‘);
        $this->_app->run($router);
        
        if ($this->_chain !== null) $this->_chain->getHandler()->handle(‘onResponse‘);
        $this->_app->getResponse()->sendResponse();
        $this->_app->getFactory()->executeDestroyMethod();
        restore_error_handler();
        restore_exception_handler();
    }



    /**
     * 错误处理句柄
     *
     * @param int $errno        
     * @param string $errstr        
     * @param string $errfile        
     * @param int $errline        
     */
    public function _errorHandle($errno, $errstr, $errfile, $errline) {
        if (0 === error_reporting()) return;
        restore_error_handler();
        /* @var $error WindError */
        $error = $this->_app->getFactory()->getInstance(‘error‘,
            array(
                $this->_config[‘web-apps‘][$this->_appName][‘error-dir‘],
                $this->_config[‘isclosed‘]));
        $error->errorHandle($errno, $errstr, $errfile, $errline);
    }


最后调用了WindError基类中的errorHandle()方法,用showErrorMessage()将错误抛出,如下:

    /**
     * 错误处理句柄
     *
     * @param int $errno
     * @param string $errstr
     * @param string $errfile
     * @param int $errline
     */
    public function errorHandle($errno, $errstr, $errfile, $errline) {
        $trace = array();
        if (Wind::$isDebug) {
            $trace = debug_backtrace();
            unset($trace[0]["function"], $trace[0]["args"]);
        }
        $this->showErrorMessage($this->_friendlyErrorType($errno) . ‘: ‘ . $errstr, $errfile,
            $errline, $trace, $errno);
    }

PHP set_error_handler()函数的使用之二

标签:set_error_handler   phpwind   

原文地址:http://11329689.blog.51cto.com/11319689/1754839

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!