异常处理

版权声明:版权归作者所有,转发请标明 https://blog.csdn.net/weixin_40087851/article/details/84335436

异常

  • 异常处理用于在指定的异常发生时改变脚本的正常流程。
  • 基本语法
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代码块中再次抛出异常(默认异常处理器或自定义顶级异常处理器)。
展开阅读全文

没有更多推荐了,返回首页