文章教程

16.3.2PHP程序中捕获异常的方法

9/17/2020 9:26:54 PM 人评论 次浏览

16.3.2 PHP程序中捕获异常的方法

在了解了PHP处理异常的类之后,本小节向读者介绍在PHP程序中使用该类捕获异常和处理异常的方法。首先介绍两种抛出异常的格式,它们如下所示。

❑try……catch……:该处理异常方式的具体格式如下所示。


try

{

//这里是可能出现异常或错误的代码,比如文件操作、数据库操作等

}

catch(Exception$e)

{

//输出错误信息

}


❑throw:关键字throw用来抛出一个异常。

需要进行异常处理的代码都必须放入try代码块内,以便捕获可能存在的异常。每一个try至少要有一个与之对应的catch。使用多个catch可以捕获不同的类所产生的异常。当try代码块不再抛出异常或者找不到catch能匹配所抛出的异常时,PHP代码就会在跳转到最后一个catch的后面继续执行。

在PHP代码中所产生的异常可被throw语句抛出并被catch语句捕获。当然,PHP允许在catch代码块内再次抛出(throw)异常。当一个异常被抛出时,其后的代码将不会继续执行,而PHP就会尝试继续查找第一个能与之匹配的catch。如果一个异常没有被捕获,而且又没使用set_exception_handler()作相应的处理的话,那么PHP将会产生一个严重的错误,并且输出UncaughtException……(未捕获异常)的提示信息。代码16-2是try……catch和throw一起用的示例代码,从这个代码可以看出try……catch和throw在程序中是如何工作的。

代码16-2 使用try……catch捕获并处理异常的示例程序16-2.php


01 <?php

02 try

03 {

04 $error='抛出异常信息,并且跳出try块<br/>';

05 if(is_dir('./test'))

06 {

07 echo'检测到../ch16是一个目录';

08 echo'<br/>';

09 echo'可能继续做其他一些操作';

10 echo'<br/>';

11 echo'……';

12 echo'<br/>';

13 }

14 else

15 {

16 throw new Exception($error,12345);//抛出异常

17 }

18 echo'上面throw异常的话,这行代码不会执行,转而执行catch块<br/>';

19 }

20 catch(Exception$e)//获取异常

21 {

22 echo'捕获异常:'.$e->getMessage()."<br/>错误代码:".$e->getCode().'<br/>';

23 //显示serror和123456

24 echo'<br/>';

25 }

26

27 echo'继续执行';

?>


【代码解析】这段代码在try块中试着判断当前目录下是否存在名叫test的目录,如果不存在这个目录,那么就会执行第16行语句,通过关键字throw抛出异常。这个异常是一个Exception类的对象,通过new运算符生成,并且用错误信息$error和错误代码12345初始化该对象,以便后面catch该异常时(代码第20行),可以获取这些信息。一旦抛出异常,那么try块中剩下的代码就不再执行,程序流程转至相应的catch块执行。代码16-2的执行结果如图16-1所示。

图 16-1 使用try……catch捕获程序异常

这段代码中,自定义了错误信息和错误代码,通过关键字throw抛出一个异常Exception类的对象$e,最终通过该对象调用其成员函数输出错误信息和代码。

教程类别