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

php异常处理 - 蜀都小一

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-05-20 13:22:011173browse

使用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>?>

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn