为了账号安全,请及时绑定邮箱和手机立即绑定
  • 查看全部
  • /**
     * 方式二:自定义异常类
     * Class ErrorToException
     */
    //显示所有的错误
    error_reporting(-1);
    class ErrorToException extends Exception{
        public static function handle($errno,$errstr)
        {
            throw new self($errstr,0);
        }
    }
    
    set_error_handler(array('ErrorToException','handle'));
    set_error_handler(array('ErrorToException','handle'),E_USER_WARNING|E_WARNING);
    
    try{
        echo $test;//notice,不会被处理
        echo gettype();//warning
        //手动触发错误
        trigger_error('test',E_USER_WARNING);
    }catch (Exception $exception){
        echo $exception->getMessage();
    }


    查看全部
  • /**
     * 方式一:ErrorException错误异常类
     * @param $errno
     * @param $errstr
     * @param $errfile
     * @param $errline
     * @throws ErrorException
     */
    function exception_error_handler($errno,$errstr,$errfile,$errline){
    
        throw new ErrorException($errstr,0,$errno,$errfile,$errline);
    }
    
    set_error_handler('exception_error_handler');
    
    try{
        echo gettype();
    }catch (Exception $exception){
        echo $exception->getMessage();
    }


    查看全部
  • /**
     * 自定义异常类处理器
     * Class ExceptionHandler
     */
    
    class ExceptionHandler
    {
     protected $_exception;
     protected $_logFile = __DIR__.'/exception_handle.log';
     public function __construct(Exception $e)
        {
     $this->_exception = $e;
     }
     public static function handle(Exception $e)
        {
     $self = new self($e);
     $self->log();
     echo $self;
     }
     public function log()
        {
            error_log($this->_exception->getMessage().PHP_EOL,3,$this->_logFile);
     }
    
     /**
         * 魔术方法__toString()
         * 快速获取对象的字符串信息的便捷方式,直接输出对象引用时自动调用的方法。
     * @return string
         */
     public function __toString()
        {
     $message = <<<EOF
            <!DOCTYPE html>
            <html>
            <head>
                <meta charset="UTF-8">
                <title>Title</title>
            </head>
            <body>
                <h1>出现异常了啊啊啊啊</h1>
            </body>
            </html>
    EOF;
     return $message;
     }
    
    }
    set_exception_handler(array('ExceptionHandler','handle'));
    /**
     * try catch不会被自定义异常处理!!!!
     */
    try{
     throw new Exception('this is a test');
    }catch (Exception $exception) {
     echo $exception->getMessage();
    }
    throw new Exception('测试自定义的异常处理器');


    查看全部
  • /**
     * 自定义异常函数处理器
     */
    header('content-type:text/html;charset=utf-8');
    function exceptionHandler_1($e)
    {
        echo '自定义异常处理器1<br/>函数名:'.__FUNCTION__.PHP_EOL;
        echo '异常信息:'.$e->getMessage();
    }
    function exceptionHandler_2($e)
    {
        echo '自定义异常处理器2<br/>函数名:'.__FUNCTION__.PHP_EOL;
        echo '异常信息:'.$e->getMessage();
    }
    
    set_exception_handler('exceptionHandler_1');
    //set_exception_handler('exceptionHandler_2');
    //恢复到上一次定义过的异常处理函数,即exceptionHandler_1
    //restore_exception_handler();
    //致命错误信息
    //restore_exception_handler();
    throw new Exception('测试自定义异常处理器');
    
    //自定义异常处理器,不会向下继续执行;异常被捕获之后,会继续执行
    //回顾:自定义错误处理器会继续执行代码,而手动抛出的错误信息不会继续执行
    echo 'test';


    查看全部
  • header('content-type:text/html;charset=utf-8');
    require_once 'Exception_Observer.php';
    require_once 'Logging_Exception_Observer.php';
    require_once 'Observable_Exception.php';
    
    Observable_Exception::attach(new Logging_Exception_Observer());
    //Observable_Exception::attach(new Logging_Exception_Observer('test.log'));
    
    class MyException extends Observable_Exception{
        public function test1()
        {
            echo 'this is a test';
        }
    }
    
    try{
        throw new MyException('出现了异常!');
    }catch (MyException $exception){
        echo $exception->getMessage();
    }


    查看全部
  • /**
     * 给观察者定义规范
     *
     * Interface Exception_Observer
     */
    interface Exception_Observer
    {
        public function update(Observable_Exception $e);
    }
    
    
    /**
     * 定义观察者
     * Class Observable_Exception
     */
    class Observable_Exception extends Exception
    {
        //保存观察者信息
        public static $_observers = array();
        public static function attach(Exception_Observer $observer)
        {
            self::$_observers[] = $observer;
        }
        public function __construct($message = "", $code = 0, Throwable $previous = null)
        {
            parent::__construct($message, $code, $previous);
            $this->notify();
        }
        public function notify()
        {
            foreach (self::$_observers as $observer) {
                $observer->update($this);
            }
        }
    }
    
    /**
     * 记录错误日志
     */
    class Logging_Exception_Observer implements Exception_Observer
    {
        protected $_filename = __DIR__.'/error_observer.log';
        public function __construct($filename = null)
        {
            if ($filename!==null && is_string($filename)){
                $this->_filename = $filename;
            }
        }
    
        public function update(Observable_Exception $e)
        {
            $message = "时间:".date('Y:m:d H:i:s',time()).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);//写到日志中
        }
    }
    
    /**
     * 测试
     */
    header('content-type:text/html;charset=utf-8');
    require_once 'Exception_Observer.php';
    require_once 'Logging_Exception_Observer.php';
    require_once 'Observable_Exception.php';
    
    Observable_Exception::attach(new Logging_Exception_Observer());
    
    class MyException extends Observable_Exception{
        public function test1()
        {
            echo 'this is a test';
        }
    }
    
    try{
        throw new MyException('出现了异常!');
    }catch (MyException $exception){
        echo $exception->getMessage();
    }


    查看全部
  • try
    {
        // 需要进行异常处理的代码段;
        throw 语句抛出异常;
    }catch( Exception $e )
    {
        ... 
    }
    catch( Exception $e )
    {
        // 处理异常
    }
    contine.....
    
    //未被捕获
        Fatal error:Uncaught exception.....

    什么时异常?异常和错误有什么区别?

    异常:程序运行与预期不太一致,与错误是两个不同的概念


    查看全部
  • 1. 什么时异常?异常和错误有什么区别?

    2. 异常的基本语法结构

    3. 如何自定义异常类

    4. 如何自定义异常处理器

    5. 如何像处理异常一样处理PHP的错误

    6. 在发生错误的时候将用户重定向到另一个页面


    查看全部

举报

0/150
提交
取消
课程须知
学习本门课程之前,建议先了解一下知识,会更有助于理解和掌握本门课程 1、掌握PHP的基础知识 2、了解面向对象编程
老师告诉你能学到什么?
1、PHP中的错误类型 2、PHP中的错误处理 3、PHP中自定义错误处理器 4、PHP中异常的使用 5、PHP中如何自定义异常类 6、PHP中如何自定义异常处理器

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!