首页 > php教程 > php手册 > php异常处理 - 蜀都小一

php异常处理 - 蜀都小一

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-05-20 13:22:01
原创
1167 人浏览过

使用try{thow}catch(){}异常处理结构,可以有效的控制多行可能发生异常的代码,基本模型如下:

<span style="color: #000000;">php
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">
{
throw </span><span style="color: #0000ff;">new</span> Exception(<span style="color: #800000;">"</span><span style="color: #800000;">错误信息</span><span style="color: #800000;">"</span>;) <span style="color: #008000;">//</span><span style="color: #008000;">抛出一个错误</span><span style="color: #000000;">
}     
</span><span style="color: #0000ff;">catch</span>(Exception $e)  <span style="color: #008000;">//</span><span style="color: #008000;">捕获错误信息,Exception是一个内置的错误处理类</span>
<span style="color: #000000;">{
echo $e</span>->getMessage(); <span style="color: #008000;">//</span><span style="color: #008000;">输出错误信息</span>
echo $e->getCode(); <span style="color: #008000;">//</span><span style="color: #008000;">返回异常代码</span>
echo $e->getFile(); <span style="color: #008000;">//</span><span style="color: #008000;">返回发生异常的文件</span>
echo $e->getLine(); <span style="color: #008000;">//</span><span style="color: #008000;">返回发生异常的行号</span>
<span style="color: #000000;">}

</span>?>
登录后复制

Exception原形:

<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Exception
{
    </span><span style="color: #0000ff;">protected</span> $message = <span style="color: #800000;">'</span><span style="color: #800000;">Unknown exception</span><span style="color: #800000;">'</span>;   <span style="color: #008000;">//</span><span style="color: #008000;"> 异常信息</span>
    <span style="color: #0000ff;">private</span>   $<span style="color: #0000ff;">string</span>;                          <span style="color: #008000;">//</span><span style="color: #008000;"> __toString cache</span>
    <span style="color: #0000ff;">protected</span> $code = <span style="color: #800080;">0</span>;                        <span style="color: #008000;">//</span><span style="color: #008000;"> 用户自定义异常代码</span>
    <span style="color: #0000ff;">protected</span> $file;                            <span style="color: #008000;">//</span><span style="color: #008000;"> 发生异常的文件名</span>
    <span style="color: #0000ff;">protected</span> $line;                            <span style="color: #008000;">//</span><span style="color: #008000;"> 发生异常的代码行号</span>
    <span style="color: #0000ff;">private</span>   $trace;                           <span style="color: #008000;">//</span><span style="color: #008000;"> backtrace</span>
    <span style="color: #0000ff;">private</span>   $previous;                        <span style="color: #008000;">//</span><span style="color: #008000;"> previous exception if nested exception</span>

    <span style="color: #0000ff;">public</span> function __construct($message = <span style="color: #0000ff;">null</span>, $code = <span style="color: #800080;">0</span>, Exception $previous = <span style="color: #0000ff;">null</span><span style="color: #000000;">);

    final </span><span style="color: #0000ff;">private</span> function __clone();           <span style="color: #008000;">//</span><span style="color: #008000;"> Inhibits cloning of exceptions.</span>
<span style="color: #000000;">
    final </span><span style="color: #0000ff;">public</span>  function getMessage();        <span style="color: #008000;">//</span><span style="color: #008000;"> 返回异常信息</span>
    final <span style="color: #0000ff;">public</span>  function getCode();           <span style="color: #008000;">//</span><span style="color: #008000;"> 返回异常代码</span>
    final <span style="color: #0000ff;">public</span>  function getFile();           <span style="color: #008000;">//</span><span style="color: #008000;"> 返回发生异常的文件名</span>
    final <span style="color: #0000ff;">public</span>  function getLine();           <span style="color: #008000;">//</span><span style="color: #008000;"> 返回发生异常的代码行号</span>
    final <span style="color: #0000ff;">public</span>  function getTrace();          <span style="color: #008000;">//</span><span style="color: #008000;"> backtrace() 数组</span>
    final <span style="color: #0000ff;">public</span>  function getPrevious();       <span style="color: #008000;">//</span><span style="color: #008000;"> 之前的 exception</span>
    final <span style="color: #0000ff;">public</span>  function getTraceAsString();  <span style="color: #008000;">//</span><span style="color: #008000;"> 已格成化成字符串的 getTrace() 信息
</span>
    <span style="color: #0000ff;">public</span> function __toString();               <span style="color: #008000;">//</span><span style="color: #008000;"> 可输出的字符串</span>
<span style="color: #000000;">}
</span>?> 
登录后复制

 同时,一个try也可以关联多个catch块,可以自定义类继承Exception类来实现

<span style="color: #000000;">php
  </span><span style="color: #0000ff;">class</span> myException1 extends Exception{}  <span style="color: #008000;">//</span><span style="color: #008000;">根据需要自定义</span>
  <span style="color: #0000ff;">class</span><span style="color: #000000;"> myException2 extends Exception{}
  </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> myException3 extends Exception{}
  </span><span style="color: #0000ff;">try</span><span style="color: #000000;">{
    </span><span style="color: #0000ff;">switch</span>(<span style="color: #800080;">1</span><span style="color: #000000;">){
      </span><span style="color: #0000ff;">case</span> <span style="color: #800080;">1</span>:<span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> myException1();
      </span><span style="color: #0000ff;">case</span> <span style="color: #800080;">2</span>:<span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> myException2();
      </span><span style="color: #0000ff;">case</span> <span style="color: #800080;">3</span>:<span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> myException3(); <span style="color: #008000;">//</span><span style="color: #008000;">当找不到对应的catch代码块时,将会抛到Exception处理,因为myException3继承了Exception</span>
<span style="color: #000000;">    }
  }
  </span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(myException1 $e){
    echo </span><span style="color: #800000;">"</span><span style="color: #800000;">自定义错误1</span><span style="color: #800000;">"</span><span style="color: #000000;">;
  }
  </span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(myException2 $e){
    echo </span><span style="color: #800000;">"</span><span style="color: #800000;">自定义错误2</span><span style="color: #800000;">"</span><span style="color: #000000;">;
  }
  </span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(Exception $e){
    echo </span><span style="color: #800000;">"</span><span style="color: #800000;">原始异常类</span><span style="color: #800000;">"</span><span style="color: #000000;">; 
  }
</span>?>
登录后复制

 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
python 突然异常情况 如何处理
来自于 1970-01-01 08:00:00
0
0
0
PHP开发者工具mysql不启动
来自于 1970-01-01 08:00:00
0
0
0
如何禁用 PHP 报告 SQL 错误?
来自于 1970-01-01 08:00:00
0
0
0
尝试使用 htmlentities 转换拉丁字符
来自于 1970-01-01 08:00:00
0
0
0
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板