异常处理的作用
异常处理用于在指定的错误(异常)情况发生时,改变脚本的正常流程。
异常处理的基本语法:
try{ //可能出现的错误(异常)的代码 } catch(Exception e){ //捕获异常并处理,通常情况下是抛出一个异常 throwe; }
实际需求,有一个函数,需要addUser()和updUser()同时成功才算成功:
function A(){
addUser(); //想知道addUser()函数是否执行成功,如何处理?
updUser(); //想知道updUser()函数是否执行成功,如何处理?
}
如何解决?
(1)使用传统方法,通过返回值确定;
<?php //添加用法 //需要addUser()和updUser()都成功 function addUser($username){ if($username=="小张"){ //添加成功 return true; }else{ //失败 return false; } } function updUser($username){ if($username=="小李"){ //添加成功 return true; }else{ //失败 return false; } } function A(){ //调用方法,添加用户 $res1=addUser("www.bianceng.cn"); //调用方法,修改用户 $res2=updUser("hello"); if($res1 && $res2){ echo "修改成功"; }else{ echo "修改失败"; } } A();?>
(2)如何使用异常处理机制?
<?php /* //添加用法 //需要addUser()和updUser()都成功 function addUser($username){ if($username=="小张"){ //添加成功 return true; }else{ //失败 return false; } } function updUser($username){ if($username=="小李"){ //添加成功 return true; }else{ //失败 return false; } } function A(){ //调用方法,添加用户 $res1=addUser("www.bianceng.cn"); //调用方法,修改用户 $res2=updUser("hello"); if($res1 && $res2){ echo "修改成功"; }else{ echo "修改失败"; } } A();*/try{ addUser("小张"); updUser("hello");}//catch:捕获的意思;Exception是php事先定好的异常类catch(Exception $e){ echo "失败信息=".$e->getMessage();}function addUser($username){ if($username=="小张"){ //添加成功 }else{ //失败 抛出异常 throw new Exception("添加失败"); } }function updUser($username){ if($username=="小李"){ //添加成功 }else{ //失败 抛出异常 throw new Exception("更新失败"); } }?>
异常使用的注意事项:
通过上例,可以看出,使用
try{ //可能出现的错误(异常)的代码 } catch(Exception e){ //捕获异常并处理,通常情况下是抛出一个异常 throwe; }
这种方式可更有效的控制错误,所以在开发中大量使用。
异常的基本处理
当异常被抛出时,try()块里的后续的代码不会继续执行,PHP会尝试查找匹配的“catch”代码块。如果一个异常发生,但没有catch捕获,会提示一个Uncatched Exception
<?php function checkNum($val){ if($val>100){ throw new Exception("error_no1:数值过大"); }else{ echo "输入的值是正常的"; } } try{ checkNum(300); }catch(Exception $e){ echo $e->getMessage()."--第".$e->getLine()."行"; }?>
当catch一个异常后,可以处理,也可以不处理可以继续抛出(throw new exception("信息");)。
例:显示错误的行数
<?php function checkNum($val){ if($val>100){ throw new Exception("error_no1:数值过大"); }else{ echo "输入的值是正常的"; } } try{ checkNum(300); }catch(Exception $e){ echo $e->getMessage()."--第".$e->getLine()."行"; }?>
也可以自定义异常处理类,来代替系统默认的顶级异常处理器:
<?php set_exception_handler("my_exception"); //修改默认的顶级异常处理器 //自定义顶级异常处理器 function my_exception($e){ echo "我自定义的顶级异常处理器".$e->getMessage(); } function checkNum($val){ if($val>100){ throw new Exception("error_no1:数值过大"); }else{ echo "输入的值是正常的"; } } try{ checkNum(300); }catch(Exception $e){ //echo $e->getMessage()."--第".$e->getLine()."行"; //继续抛出,此时将会启动php默认的异常处理器来处理,也可以自定义顶级异常处理器来处理 throw $e; }?>
使用多个catch代码块,可以捕获不同种类的异常:
<?php //自定义了一个异常 class MyException1 extends Exception{//继承默认异常 } class MyException2 extends Exception{ } function A(){ throw new MyException1(a); } function B(){ throw new MyException2(b); } function C(){ try{ A(); //抛出MyException1 B(); //抛出MyException2 }catch(Exception1 $e1){ echo $e1->getMessage(); }catch(Exception2 $e2){ echo $e2->getMessage(); } }?>
PHP中有些异常是无法捕获的,只能由系统异常处理器来处理。能不能catch到异常,取决于有没有真的抛出异常。
例:
<?php try{ //$i=10/0; $fp=fopen("abc.txt","r"); //无法抛出,由系统异常处理器来处理 }catch(Exception $e){ echo "ok"."<br />"; //这两行代码并没有执行,原因是try块里的代码并没有抛出异常 echo $e->getMessage(); }?>
URL: http://www.bianceng.cn/webkf/PHP/201701/50512.htm
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索异常
, 异常处理
, 代码
, 错误
, catch
, 处理
, 一个
, 捕获异常方式
PHP异常处理
php异常、php异常捕获、exception、php异常处理机制、尼古丁贴片,以便于您获取更多的相关知识。