php异常处理

异常处理的作用

异常处理用于在指定的错误(异常)情况发生时,改变脚本的正常流程。

异常处理的基本语法:

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异常处理机制、尼古丁贴片,以便于您获取更多的相关知识。

时间: 2024-08-29 23:04:27

php异常处理的相关文章

异常处理:android中添加按钮事件,出现NullPointerException

问题描述 异常处理:android中添加按钮事件,出现NullPointerException 解决方案 在maincsactivity的oncreate的72行找,有没有对象为null 解决方案二: 对象为空,要么你的按钮对象还没初始化,要么点击代码里有空对象,你调试一下便知 解决方案三: 空指针异常,没什么难找的,Debug一下即可很快找到: 解决方案四: 空指针异常,按钮对象没有初始化 解决方案五: 可能你声明了一个View,但是你没有findViewById,或者findViewById

异常处理汇总-后端系列

异常处理汇总:http://www.cnblogs.com/dunitian/p/4599258.html SignalR   01.SignalR:"System.Reflection.TargetInvocationException"类型的未经处理的异常在 mscorlib.dll 中发生 http://www.cnblogs.com/dunitian/p/5232229.html 02.SignalR代理对象异常:Uncaught TypeError: Cannot read

一个用于J2EE应用程序的异常处理框架

在大多数Java项目中,大部分代码都是样板代码.异常处理就属于此类代码.即使业务逻辑只有3到4行代码,用于异常处理的代码也要占10到20行.本文将讨论如何让异常处理保持简单和直观,使开发人员可以专心于开发业务逻辑,而不是把时间浪费在编写异常处理的样板代码上.本文还将说明用于在J2EE环境中创建和处理异常的基础知识和指导原则,并提出了一些可以使用异常解决的业务问题.本文将使用Struts框架作为表示实现,但该方法适用于任何表示实现. 使用checked和unchecked异常的场景 您是否曾经想过

PHP错误处理及异常处理笔记

 给新人总结一下PHP的错误处理. PHP提供了错误处理和日志记录的功能. 这些函数允许你定义自己的错误处理规则,以及修改错误记录的方式. 这样,你就可以根据自己的需要,来更改和加强错误输出信息以满足实际需要. 通过日志记录功能,你可以将信息直接发送到其他日志服务器,或者发送到指定的电子邮箱(或者通过邮件网关发送),或者发送到操作系统日志等,从而可以有选择的记录和监视你的应用程序和网站的最重要的部分. 错误报告功能允许你自定义错误反馈的级别和类型,可以是简单的提示信息或者使用自定义的函数进行处理

JAVA【异常二】异常处理机制

Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮.易于调试.异常之所以是一种强大的调试手段,在于其回答了以下三个问题: 什么出了错? 在哪出的错? 为什么出错? 在有效使用异常的情况下,异常类型回答了"什么"被抛出,异常堆栈跟踪回答了"在哪"抛出,异常信息回答了"为什么"会抛出.   在Java 应用程序中,异常处理机制为:抛出异常,捕捉异常. 抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运

前端-java web 全局异常处理 如何配置

问题描述 java web 全局异常处理 如何配置 怎样配置java web 前端在访问该项目中根本不存在的方法的时候 跳转异常页面啊? 解决方案 java web异常处理java web 中几种异常处理Java web的几种异常处理 解决方案二: 看你使用什么技术了.要是ssh框架,直接使用struts2或者spring mvc的拦截器就行,如果是servlet,那就自己写一个拦截器. 解决方案三: 前端访问项目中不存在的方法是什么意思? 页面调用脚本方法不存在的时候浏览器是会执行异常的. 解

Spring4.1新特性——异步调度和事件机制的异常处理

Spring 4.1对异步调用提供了AsyncResult及SuccessCallback.FailureCallback.和异常处理的支持:对事件调度也提供了相应的异常处理器.   1.事件调度异常处理器 1.1.定义异常处理器: Java代码   public class MyErrorHandler implements ErrorHandler {       @Override       public void handleError(Throwable throwable) {  

异常处理汇总-服务器系列

异常处理汇总:http://www.cnblogs.com/dunitian/p/4599258.html   公司/本地服务器系列 1.IIS7.5+WebConfig实现页面伪静态和301重定向 http://www.cnblogs.com/dunitian/p/4324341.html 2.服务器环境~某个页面无法访问的处理 http://www.cnblogs.com/dunitian/p/4325027.html 3.win7+IIS7下木有4.0框架问题的解决方案 http://ww

异常处理汇总-数据库系列

异常处理汇总:http://www.cnblogs.com/dunitian/p/4599258.html SQLServer 1.[SQL]关于无法附加文件的错误 http://www.cnblogs.com/dunitian/p/4165249.html 2.在sql server中建存储过程,如果需要参数是一个可变集合怎么处理? http://www.cnblogs.com/dunitian/p/4501268.html 3.关于Sa系列用户不能登录,只能本地windows身份验证的说明

Node.js之异常处理

   记得刚刚开始学Node.js时自己尝试着写了一个简单的http服务器,跟以前接触过的php相比感觉更自由,编起码来也更爽了.但是某天发现稍微一个很小的错误就导致整个http进程挂掉了,顿时有种不靠谱的感觉啊,跟php比起来感觉Node.js容错能力确实弱了很多,起码一个php文件出错也不会导致所有的服务都挂掉.           后来接触到Node.js web开发框架后感觉也不是那么轻易就让整个进程都挂掉的,于是便想研究下Node.js究竟是如何来处理各种异常从而避免整个进程挂掉的.