ホームページ > php教程 > php手册 > php异常处理 - 蜀都小一

php异常处理 - 蜀都小一

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-05-20 13:22:01
オリジナル
1169 人が閲覧しました

使用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 までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート