zoukankan      html  css  js  c++  java
  • php异常处理

    PHP具有很多异常处理类,其中Exception是所有异常处理的基类。
    Exception具有几个基本属性与方法,其中包括了:
    message 异常消息内容
    code 异常代码
    file 抛出异常的文件名
    line 抛出异常在该文件的行数
    其中常用的方法有:
    getTrace 获取异常追踪信息
    getTraceAsString 获取异常追踪信息的字符串
    getMessage 获取出错信息

     异常使用场景

    1、主要处理各种可预见,不可预见的情况,统一返回,没有使用 try...catch 接收的异常直接跳进设置的方法


    2. 希望业务代码中不充斥一大堆打印调试的处理,就会用异常机制。或者是一些业务上需要定义一些异常。

    如果异常出现,没有捕获,异常之前的代码可以继续执行,之后的脚本将不能执行

    1、不会捕获语法错误

    2、try catch 只能捕获抛出异常

    3、父类可以捕获子类抛出的异常

    实验一、不同子类是否可以互相捕获

    class ExceptionA extends Exception {
    
    }
    
    
    class ExceptionB extends Exception {
    
    }
    
    function try_catch($type) {
    
        switch ($type) {
            case 1:
                throw new ExceptionA('a exception');
                break;
            case 2:
                throw new ExceptionB('b exception');
                break;
        }
    }
    
    try {
        try_catch(1);
    } catch (ExceptionB $e) {
        $e->getMessage();
    }
    

     

    执行后抛出上面错误,不同子类不能捕获

    实验二、父类是否可以捕获子类异常

    <?php
    /**
     * Created by PhpStorm.
     * User: ganga
     * Date: 2019/3/9
     * Time: 上午10:57
     */
    
    class ExceptionA extends Exception {
    
    }
    
    
    class ExceptionB extends Exception {
    
    }
    
    function try_catch($type) {
    
        switch ($type) {
            case 1:
                throw new ExceptionA('a exception');
                break;
            case 2:
                throw new ExceptionB('b exception');
                break;
        }
    }
    
    try {
        try_catch(1);
    } catch (Exception $e) {
        echo $e->getMessage();
    }
    

     

    结果显示父类可以捕获子类

    实验三、多个try catch进行捕获多个不同异常

    class ExceptionA extends Exception {
    
    }
    
    
    class ExceptionB extends Exception {
    
    }
    
    function try_catch($type) {
    
        switch ($type) {
            case 1:
                throw new ExceptionA('a exception');
                break;
            case 2:
                throw new ExceptionB('b exception');
                break;
        }
    }
    
    try {
        try_catch(2);
    } catch (ExceptionA $e) {
        echo $e->getMessage();
    } catch (ExceptionB $e) {
        echo $e->getMessage();
    }
    

     显示结果

    可以利用多个try catch 进行捕获,针对不同异常进行不同处理

    实验四、异常嵌套

    class ExceptionA extends Exception {
    }
    
    
    class ExceptionB extends Exception {
    }
    
    function try_catch($type) {
        switch ($type) {
            case 1:
                throw new ExceptionA('a exception');
                break;
            case 2:
                throw new ExceptionB('b exception');
                break;
        }
    }
    
    try {
        try {
            try_catch(2);
        } catch (ExceptionA $e) {
            echo $e->getMessage();
        }
    } catch (ExceptionB $e) {
        echo $e->getMessage();
    }
    

     实验结果证明、

        如果在内层 "try" 代码块中异常没有被捕获,则它将在外层级上查找 catch 代码块去捕获。

    实验五、set_exception_handler() 可以在定义异常处理器,处理所有未捕获异常的用户定义函数。

    class ExceptionA extends Exception {
    }
    
    
    class ExceptionB extends Exception {
    }
    
    function setException($exception) {
        echo 'execption:' . $exception->getMessage() . ':' . $exception->getCode();
    }
    function try_catch($type) {
        switch ($type) {
            case 1:
                throw new ExceptionA('a exception');
                break;
            case 2:
                throw new ExceptionB('b exception');
                break;
        }
    }
    
    set_exception_handler('setException');
    
    throw new Exception('set execption');
    
  • 相关阅读:
    如何导出视图中的数据
    swift中的流程控制
    PostgreSQL导出sql脚本文件
    Java分享笔记:使用缓冲流复制文件
    Java分享笔记:FileOutputStream流的write方法
    Java分享笔记:FileInputStream流的 read()方法 和 read(byte[] b)方法
    Java分享笔记:File类中常用方法的介绍
    Java分享笔记:使用entrySet方法获取Map集合中的元素
    Java分享笔记:使用keySet方法获取Map集合中的元素
    Java分享笔记:Map集合(接口)的基本方法程序演示
  • 原文地址:https://www.cnblogs.com/agang-php/p/10499946.html
Copyright © 2011-2022 走看看