# 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
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
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
2
3
4
5
6
# 代码层面的使用
try {
throw new myException("这是一个自定义的异常",123456);
} catch (myException $e) {
// 捕捉时注意类型约束为自己定义的异常处理类名
echo $e -> getAllInfo();
}
1
2
3
4
5
6
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
2
3
4
5
6
7
8
9
10
11
12
13
14