# PHP学习(八) PHP异常处理

# 系统自带的异常处理

# 系统自带的异常处理

class Exception{
    protected $message = "Unknown exception"; // 异常信息
    protected $code = 0; // 用户自定义异常代码
    protected $file; // 发生异常的文件名
    protected $line;
    function __construct($message = null ,$code = 0);
    final function getMessage(); // 返回异常信息
    final function getCode(); // 返回异常代码
    final function getFile(); // 返回发生异常的文件名
    final function getLine(); // 返回发生异常的代码行号
    final function getTrace(); // backtrace()数组
    final function getTraceAsString(); // 已格式化成字符串的getTrace()信息
    function __toString(); // 可输出的字符串。
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 代码层面的使用

// try分支在这里进行代码测试,如果有问题就要抛出一个异常,如果没有问题就继续执行
try {
    // catch分支就是捕捉异常对象
    // 参数:异常参数,使用的是类型约束,只能捕捉由Exception类实例化来的对象
} catch (Exception $e) {
    echo "错误文件为:";
    echo $e -> getFile(); // 得到发生异常的文件
    echo ",    发生错误的行为:";
    echo $e -> getLine(); // 得到发生错误的行为。
    echo ",    错误代码为:";
    echo $e ->getCode(); // 得到异常代码。
    echo ",   错误信息为:";
    echo $e -> getMessage(); // 得到异常信息。
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 自定义异常处理

# 自定义异常处理

class myException extends Exception {
    // 可以自己定义异常处理流程
    public function getAllInfo(){
        return "异常发生的文件为:{$this -> getFile()},异常发生的行为:{$this -> getLine()},异常的信息为:{$this -> getMessage()},异常的代码为:{$this->getCode()}";
    }
}
1
2
3
4
5
6

# 代码层面的使用

try {
    throw new myException("这是一个自定义的异常",123456);
} catch (myException $e) {
    // 捕捉时注意类型约束为自己定义的异常处理类名
    echo $e -> getAllInfo();
}
1
2
3
4
5
6

# 捕捉多个异常处理

在try代码之后,必须至少要给出一个catch代码块,也可以将多个catch代码块与一个try代码块关联使用。那么使用多个catch就可以捕获不同的类所产生的异常,注意顺序。

try{
    // 捕捉多个异常处理要抛出多个异常对象,不能是由一个异常处理类实例化的对象
    if($_GET['num']==1){
        throw new myException('user');
    }else if{
        throw new Exception("sys");
    }
// 在捕捉时系统的异常处理分支要放在最后
// 注意类型约束
} catch (myException $e) {
    echo $e -> getAllInfo();
}catch(Exception $e){
    echo $e -> getMessage();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
更新时间: 11/8/2019, 4:51:43 PM