异常
- 异常处理用于在指定的异常发生时改变脚本的正常流程。
- 基本语法
try{
//代码
}catch(Exception $e){
//捕获异常并处理
//(1)自定义处理
//(2)抛出
//throw $e;
}
简单案例
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
function fun1($data){
if($data==1){
//抛出异常
throw new Exception("数据1错误");
}
}
function fun2($data){
if($data==2){
throw new Exception("数据2错误");
}
}
try{
fun1(2);
fun2(2);
}catch(Exception $e){
echo $e->getMessage();
}
?>
</body>
</html>
注意
- 当捕获到某个异常后,异常之后的代码不再执行。
- 当异常发生但没有捕获时,会报如下错误:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
function fun1($data){
if($data==1){
//抛出异常
throw new Exception("数据1错误");
}
}
function fun2($data){
if($data==2){
throw new Exception("数据2错误");
}
}
fun1(2);
fun2(2);
?>
</body>
</html>

- 当捕获到异常,我们可以处理,也可以不处理继续抛出异常,此时将启动php默认的异常处理器来处理。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
function fun1($data){
if($data==1){
//抛出异常
throw new Exception("数据1错误");
}
}
function fun2($data){
if($data==2){
throw new Exception("数据2错误");
}
}
try{
fun1(1);
fun2(2);
}catch(Exception $e){
//启动php默认异常处理器
throw $e;
}
?>
</body>
</html>

- 设置顶级异常处理器:set_exception_handler(“自定义函数”);
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
function fun1($data){
if($data==1){
//抛出异常
throw new Exception("数据1错误");
}
}
function fun2($data){
if($data==2){
throw new Exception("数据2错误");
}
}
function myException($e){
echo "顶级处理器:".$e->getMessage();
}
set_exception_handler("myException");
try{
fun1(1);
fun2(2);
}catch(Exception $e){
//启动php默认异常处理器
throw $e;
}
?>
</body>
</html>
规则
- 需要进行异常处理的代码应该放入try代码内,以便捕获潜在的异常。
- 每个try或者throw代码块必须至少拥有一个对应的catch代码块。
- 使用多个catch代码块可以捕获多种异常。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
class Exception1 extends Exception{}
class Exception2 extends Exception{}
function fun1($data){
if($data==1){
throw new Exception1("数据1错误");
}
}
function fun2($data){
if($data==2){
throw new Exception2("数据2错误");
}
}
try{
fun1(2);
fun2(2);
}catch(Exception1 $e){
echo $e->getMessage();
}catch(Exception2 $e){
echo $e->getMessage();
}
?>
</body>
</html>
- 可以在catch代码块中再次抛出异常(默认异常处理器或自定义顶级异常处理器)。