php错误封装类

1、创建MyErrorHandler.php文件

代码如下:

<?php
class MyErrorHandler {
    public $message;
    public $filename;
    public $line;
    public $vars = array();
    protected $_noticeLog = 'F:
oot
oticeLog.log';

    public function __construct ($message,$filename,$line,$vars) {
        $this->message = $message;
        $this->filename = $filename;
        $this->line = $line;
        $this->vars = $vars;
    }

    public static function deal ($errno,$errmsg,$filename,$line,$vars) {
        $self = new self($errno,$errmsg,$filename,$line,$vars);

        switch ($errno) {
            case E_USER_ERROR:
                return $self->dealError();
                break;
            case E_USER_WARNING:
            case E_WARNING:
                return $self->dealWarning();
                break;
            case E_NOTICE:
            case E_USER_NOTICE:
                return $self->dealNotice();
            default:
                return false;
        }
    }
    
    /**
    * 致命的错误
    */
    public function dealError() {
        ob_start();
        debug_print_backtrace();
        $backtrace = ob_get_flush();
        $errorMsg = <<<EOF
出现了致命的错误,如下:
产生错误的文件:{$this->filename}
产生错误的信息:{$this->message}
产生错误的行号:{$this->line}
追踪信息{$backtrace}
EOF;
        error_log($errorMsg,1,'279921301@qq.com','From:php[error错误日志]');
        exit(1);
    }

    /**
    * 警告的错误
    */
    public function dealWarning() {
        $errorMsg = <<<EOF
出现了警告的错误,如下:
产生警告的文件:{$this->filename}
产生警告的信息:{$this->message}
产生警告的行号:{$this->line}
EOF;
        return error_log($errorMsg,1,'279921301@qq.com','From:php[error警告日志]');
    }

    /**
    * 通知的错误
    */
    public function dealNotice() {
        $datetime = date('Y-m-d H:i:s');
        $errorMsg = <<<EOF
出现了通知的错误,如下:
产生通知的文件:{$this->filename}
产生通知的信息:{$this->message}
产生通知的行号:{$this->line}
产生通知的时间:{$datetime}
EOF;
        return error_log($errorMsg,3,$this->_noticeLog);
    }
}

2、测试代码

<?php
include "MyErrorHandler.php";

//报告所有 PHP 错误
error_reporting(-1);

//不显示错误信息
ini_set('display_errors',0);
set_error_handler(array('MyErrorHandler','deal'));

echo $test; //Notice错误
settype($var,'test');  //警告错误
test();

注意:发送邮件需要在本地配置mail函数,可以参考本人的上一篇文章如何配置mail函数发邮件。