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