PHP的错误处理

来源:互联网 发布:知乎 经典 编辑:程序博客网 时间:2024/05/21 05:42

php的错误处理方法可以通过以下方式重写(在代码开始的地方自定义即可):

        error_reporting(0);//0为不输出PHP自带的错误输出,E_ALL为所有的警告和错误都输出        set_error_handler([__CLASS__, 'appError']);        set_exception_handler([__CLASS__, 'appException']);        register_shutdown_function([__CLASS__, 'appShutdown']);

CLASS就是当前类了(当然也可以写别的类),然后依次介绍下面的三个异常处理方法:

set_error_handler

字面意思就是自定义错误处理,也就是程序错误会使用这里自定义的错误处理方法,示例如下:

/**     * Error Handler     * @param  integer $errno   错误编号     * @param  integer $errstr  详细错误信息     * @param  string  $errfile 出错的文件     * @param  integer $errline 出错行号     * @param array    $errcontext     */    public static function appError($errno, $errstr, $errfile = '', $errline = 0, $errcontext = [])    {        switch ($errno) {            case E_ERROR:            case E_PARSE:            case E_CORE_ERROR:            case E_COMPILE_ERROR:            case E_USER_ERROR:                ob_end_clean();                $errorStr = "$errstr ".$errfile." 第 $errline 行.";                self::halt($errorStr);                break;            default:                if(!empty(ob_get_contents())){                    //清空缓存区                    ob_end_clean();                }                $errorStr = "[$errno] $errstr ".$errfile." 第 $errline 行.";                require SUNNY_PATH."tpl/error.php";                exit;                break;        }    }

set_exception_handler

自定义的异常处理,示例如下

/**     * Exception Handler     * @param  \Exception|\Throwable $e     */    public static function appException($e)    {        if (!$e instanceof \Exception) {            $e = new \Exception($e);        }        if (IS_CLI) {           echo $e->getMessage().PHP_EOL;die;        } else {            if(!empty(ob_get_contents())){                //清空缓存区                ob_end_clean();            }            $errorStr =  $e->getMessage();            require SUNNY_PATH."tpl/error.php";            exit;        }    }

register_shutdown_function

程序中断异常处理,示例如下:

 /**     * Shutdown Handler     */    public static function appShutdown()    {        if ($e = error_get_last()) {            switch($e['type']){                case E_ERROR:                case E_PARSE:                case E_CORE_ERROR:                case E_COMPILE_ERROR:                case E_USER_ERROR:                    self::halt($e);                    break;            }        }    }

以上示例参考TP的错误处理,不过是参考的TP3

当然,自己可以任意写处理方法

0 0
原创粉丝点击