• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

php异常处理

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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');

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap