使用try{thow}catch(){}異常處理結構,可以有效的控制多行可能發生異常的代碼,基本模型如下:
<?php try { throw new Exception("錯誤信息";) //拋出一個錯誤 } catch(Exception $e) //捕獲錯誤信息,Exception是一個內置的錯誤處理類 { echo $e->getMessage(); //輸出錯誤信息 echo $e->getCode(); //返回異常代碼 echo $e->getFile(); //返回發生異常的文件 echo $e->getLine(); //返回發生異常的行號 } ?>
Exception原形:
<?php class Exception { protected $message = 'Unknown exception'; // 異常信息 private $string; // __toString cache protected $code = 0; // 用戶自定義異常代碼 protected $file; // 發生異常的文件名 protected $line; // 發生異常的代碼行號 private $trace; // backtrace private $previous; // previous exception if nested exception public function __construct($message = null, $code = 0, Exception $previous = null); final private function __clone(); // Inhibits cloning of exceptions. final public function getMessage(); // 返回異常信息 final public function getCode(); // 返回異常代碼 final public function getFile(); // 返回發生異常的文件名 final public function getLine(); // 返回發生異常的代碼行號 final public function getTrace(); // backtrace() 數組 final public function getPrevious(); // 之前的 exception final public function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息 public function __toString(); // 可輸出的字符串 } ?>
同時,一個try也可以關聯多個catch塊,可以自定義類繼承Exception類來實現
<?php class myException1 extends Exception{} //根據需要自定義 class myException2 extends Exception{} class myException3 extends Exception{} try{ switch(1){ case 1:throw new myException1(); case 2:throw new myException2(); case 3:throw new myException3(); //當找不到對應的catch代碼塊時,將會拋到Exception處理,因為myException3繼承了Exception } } catch(myException1 $e){ echo "自定義錯誤1"; } catch(myException2 $e){ echo "自定義錯誤2"; } catch(Exception $e){ echo "原始異常類"; } ?>