php实现的错误处理封装类实例

yipeiwu_com6年前PHP代码库

本文实例讲述了php实现的错误处理封装类。分享给大家供大家参考,具体如下:

1、创建MyErrorHandler.php文件

代码如下:

<?php
class MyErrorHandler {
  public $message;
  public $filename;
  public $line;
  public $vars = array();
  protected $_noticeLog = 'F:\root\noticeLog.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函数,可以参考前文《PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法》。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP错误与异常处理方法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

php警告Creating default object from empty value 问题的解决方法

解决方法是找到报错的位置然后看哪个变量是没有初始化而直接使用的,将这个变量先实例化一个空类。如:复制代码 代码如下:$ct = new stdClass();修改文件相应代码,如:复制代...

PHP判断一个字符串是否是回文字符串的方法

本文实例讲述了PHP判断一个字符串是否是回文字符串的方法。分享给大家供大家参考。具体实现方法如下: <?php function ishuiwen($str){...

基于flush()不能按顺序输出时的解决办法

如果是在linux下, 首先确认是否添加 ob_start() 和 ob_flush().复制代码 代码如下:ob_start();for ($i=1; $i<=10; $i++)...

PHP常用的三种设计模式

一、首先来看,单例模式 所谓单例模式,即在应用程序中只会有这个类的一个实例存在。 通常单例模式用在仅允许数据库访问对象的实例中,从而防止打开多个数据库连接。 一个单例类应包括以下几点:...

PHP多例模式介绍

学习java就知道设计模式中有多例模式: 1、多例类可以有多个实例2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例。 大家都知道PHP单例模式,却很少说PHP多例模式,...