【PHP的异常处理【完整】】

PHP的异常处理机制大多数和java的很相似,但是没有finally,而且还可以自定义顶级异常处理器;捕捉到异常信息后,会跳出try-catch块,如果catch中没有跳转的动作,则会继续执行下一条语句。

简单的异常捕捉:

 1 <?php
 2     function addUser($name)
 3     {
 4         if($name=="zheng")
 5         {
 6             echo "添加成功!<br/>";
 7         }
 8         else
 9         {
10             throw new Exception("添加失败!<br/>");
11         }
12     }
13 
14     function updateUser($name)
15     {
16         if($name=="song")
17         {
18             echo "更新成功!<br/>";
19         }
20         else
21         {
22             throw new Exception("更新失败!<br/>");
23         }
24     }
25     try
26     {updateUser("xx");
27         addUser("zheng");
28         
29     }
30     catch(Exception $e)
31     {
32         echo "捕捉到了异常信息!&nbsp;".$e->getMessage();
33     }
34     echo "你好";
35 ?>
View Code

通过继承Exception类可以自定义异常类,实现自定义异常,可以捕获不同类型的异常以实现不同的处理机制。

 1 <?php
 2 //通过这个程序可以实现捕捉不同的异常!
 3 class Exception1 extends Exception
 4 {
 5 
 6 }
 7 class Exception2 extends Exception 
 8 {
 9 
10 }
11 
12 //$x=1;
13 $x=2;
14 try
15 {
16     if($x==1)
17     {
18         throw new Exception1("异常信息1");
19     }
20     else
21     {
22         throw new Exception2("异常信息2");
23     }
24 }
25 catch(Exception1 $e1)
26 {
27     echo "捕捉到了".$e1->getMessage()."!";
28 }
29 catch(Exception2 $e2)
30 {
31     echo "捕捉到了".$e2->getMessage()."!";
32 }
33 ?>
View Code

通过set_exception_handler方法可以自定义系统默认的异常处理器,我们可以认为是顶级异常处理器,一旦出现异常,系统会自动调用

1 <?php
2 function myException($e)
3 {
4     echo "这里是顶级异常处理器!在没有进行捕捉的时候默认处理异常的异常处理器!<br/>异常信息是:".$e->getMessage();
5 }
6 set_exception_handler("myException");
7 
8 throw new Exception("出现了程序异常!");
9 ?>
View Code

 

最后,PHP的异常处理机制还存在漏洞(PHP5.3.5):

在下面的情况下PHP不会捕捉异常,而是直接报错。

 1 <?php
 2 //php的两个经典漏洞
 3 try
 4 {
 5     $a=8/0;
 6 }
 7 catch(Exception $e)
 8 {
 9     echo "异常信息捕捉成功!<br/>";
10 }
11 
12 try
13 {
14     $file=fopen("xxx.txt","r+");
15 }
16 catch(Exception $e)
17 {
18     echo "异常信息捕捉成功!<br/>";
19 }
20 
21 ?>
View Code

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。