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 "捕捉到了异常信息! ".$e->getMessage(); 33 } 34 echo "你好"; 35 ?>
通过继承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 ?>
通过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 ?>
最后,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 ?>
时间: 2024-10-12 21:27:11