[PHP错误异常]①⑤--观察者模式处理异常信息

Exception_Observer.php

<?php
/**
 * 给观察者定义的规范
 * Interface Exception_observer
 */
interface Exception_Observer
{
    public function update(Observable_Exception $e);
}

Logging_Exception_Observer.php

<?php

class Logging_Exception_Observer implements Exception_Observer
{
    protected $_filename = "D:/error/imoocException.log";

    function __construct($filename = null)
    {
        if ($filename != null && is_string($filename)) {
            $this->_filename = $filename;
        }
    }

    /**
     * 记录日志
     * @param Observable_Exception $e
     */
    public function update(Observable_Exception $e)
    {
        $message = "时间:" . date("Y-m-d H:i:s") . PHP_EOL;
        $message .= "信息:" . $e->getMessage() . PHP_EOL;
        $message .= "追踪信息:" . $e->getTraceAsString() . PHP_EOL;
        $message .= "文件:" . $e->getFile() . PHP_EOL;
        $message .= "行号:" . $e->getLine() . PHP_EOL;
        error_log($message, 3, $this->_filename);
    }
}

Emailling_Exception_Observer.php

<?php

class Emailling_Exception_Observer implements Exception_Observer
{
    protected $_email = '403133112@qq.com';

    public function __construct($email = null)
    {
        if ($email != null && filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $this->_email = $email;
        }
    }

    /**
     * 发送邮件
     * @param Observable_Exception $e
     */
    public function update(Observable_Exception $e)
    {
        $message = "时间:" . date("Y-m-d H:i:s") . PHP_EOL;
        $message .= "信息:" . $e->getMessage() . PHP_EOL;
        $message .= "追踪信息:" . $e->getTraceAsString() . PHP_EOL;
        $message .= "文件:" . $e->getFile() . PHP_EOL;
        $message .= "行号:" . $e->getLine() . PHP_EOL;
        error_log($message, 1, $this->_email);
    }
}

test.php

<?php
require_once 'Exception_observer.php';
require_once 'Observable_Exception.php';
require_once 'Logging_Exception_Observer.php';
require_once 'Emailling_Exception_Observer.php';

Observable_Exception::attach(new Logging_Exception_Observer());
Observable_Exception::attach(new Logging_Exception_Observer('D:/error/test1.log'));
//Observable_Exception::attach(new Emailling_Exception_Observer());

class MyException extends Observable_Exception
{

    public function test()
    {
        echo "this is a test";
    }

    public function test1()
    {
        echo "我是自定义的方法处理这个异常";
    }
}

try {
    throw new MyException('出现异常了,记录一下下!!!');
} catch (MyException $e) {
    echo $e->getMessage();
    echo '<hr/>';
    $e->test();
    echo "<hr/>";
    $e->test1();
}
Paste_Image.png
Paste_Image.png
Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 定义:观察者模式(Observer)有时又被称为发布/订阅模式,当一个对象状态发生改变时,依赖它的对象全部会...
    四月不见阅读 2,929评论 0 0
  • 异常与错误的区别 关于异常处理这一块,在官方的手册上介绍的不够详细,所以我在这里再做一个相对详细一点的总结...
    四月不见阅读 6,923评论 0 18
  • 异常(Exception)用于在指定的错误发生时改变脚本的正常流程。 什么是异常? PHP 5 提供了一种新的面向...
    josephok阅读 3,624评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,828评论 19 139
  • f50aa3c0371d阅读 1,090评论 0 0

友情链接更多精彩内容