本文實例講述了PHP異常類及異常處理操作。分享給大家供大家參考,具體如下:
異常處理歸類于錯誤處理,PHP從5.1.0開始增加了Exception異常處理類。
一、異常處理
PHP 異常處理與Java相似,都使用try、throw、catch語句,發生異常時代碼。如果異常沒有被捕獲,而且又沒用使用 set_exception_handler()
作相應的處理的話,那么將發生一個嚴重的錯誤(致命錯誤),并且輸出 "Uncaught Exception" (未捕獲異常)的錯誤消息。
1、try:
用于可能發生異常的代碼塊。
2、throw:
規定如何觸發(trigger)異常,用于拋出異常。每一個throw必須對應至少一個catch。
3、catch:
捕獲異常,并創建包含異常信息的對象。
說明:姑且認為php的異常必須throw才能捕獲到。
基本結構:
try{#some codesthrow new Exception("message"[,code[,...]]);}catch(Exception $ex){#some codes}
二、PHP 異?;怑xception
類摘要:
Exception {/* 屬性 */protected string $message ;protected int $code ;protected string $file ;protected int $line ;/* 方法 */public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )final public string getMessage ( void )final public Exception getPrevious ( void ) //獲取異常鏈中前一個異常final public int getCode ( void )final public string getFile ( void )final public int getLine ( void )final public array getTrace ( void ) //獲取異常追蹤信息final public string getTraceAsString ( void ) //字符串方式返回異常追蹤信息public string __toString ( void )final private void __clone ( void )}
說明:
由該基類可看出,php異常對象主要包含異常的文本信息(message)、異常代碼/代號(code,應該是用于開發人員標識)、異常發生的文件(file,即發生異常的php文件)、異常發生的具體位置(line,拋出異常的行號)。
示例:
<?phptry { throw new Exception("Some error message", 30);//拋出異常,設置異常代號為30} catch(Exception $e) { echo "Exception:file:".$e->getFile().",message:" . $e->getMessage().",code:".$e->getCode()."line:".$e->getLine();}?>
瀏覽器打印結果:
Exception:file:D:/studyFolder/wamp/workspace/basicphp/testException.php,message:Some error message,code:30line:3
關于php中類與對象的基礎(如方法調用),具體看類與對象小節。
三、自定義異常類
示例:
class customException extends Exception { public function errorMessage() { //error message $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address'; return $errorMsg; } }
拋出與捕獲該異常:
try{throw new customException("這是自定義異常。");}catch(customException $ex){#some codes}
四、多catch捕獲異常
當一個try語句中可能拋出不同的異常時,對應的可有多個catch塊捕獲不同類型異常。同java中的一些注意點:
1、大異常catch放后面。因為拋出異常時按順序判斷先滿足哪個catch,一次僅執行一個catch。
2、執行一次try,最多執行一個catch(發生異常時),即若前面某個catch滿足執行,則后面的catch不再考慮。(常見考題)
五、嵌套拋出異常
結構示例:
try{ try{ throw new Exception("第一個異常"); } catch(Exception $e1){ #相關處理 throw new Exception("處理后拋出異常");//再次拋出異常 }}catch(Exception $e2){ #相關處理}
六、設置頂層異常處理器
set_exception_handler('myException')
:函數設置所有未捕獲的異常的處理函數句柄(函數名,此處即myException)。
示例:
<?phpfunction myException($exception){echo "<b>Exception:</b> " , $exception->getMessage();}set_exception_handler('myException');throw new Exception('Uncaught Exception occurred');?>
結果:
Exception:Uncaught Exception occurred
希望本文所述對大家PHP程序設計有所幫助。
新聞熱點
疑難解答
圖片精選