【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

 

你可能感兴趣的:(异常处理)