PHP異常類及異常處理操作實(shí)例詳解
本文實(shí)例講述了PHP異常類及異常處理操作。分享給大家供大家參考,具體如下:
異常處理歸類于錯(cuò)誤處理,PHP從5.1.0開始增加了Exception異常處理類。
一、異常處理
PHP 異常處理與Java相似,都使用try、throw、catch語句,發(fā)生異常時(shí)代碼。如果異常沒有被捕獲,而且又沒用使用 set_exception_handler()
作相應(yīng)的處理的話,那么將發(fā)生一個(gè)嚴(yán)重的錯(cuò)誤(致命錯(cuò)誤),并且輸出 "Uncaught Exception" (未捕獲異常)的錯(cuò)誤消息。
1、try:
用于可能發(fā)生異常的代碼塊。
2、throw:
規(guī)定如何觸發(fā)(trigger)異常,用于拋出異常。每一個(gè)throw必須對(duì)應(yīng)至少一個(gè)catch。
3、catch:
捕獲異常,并創(chuàng)建包含異常信息的對(duì)象。
說明:姑且認(rèn)為php的異常必須throw才能捕獲到。
基本結(jié)構(gòu):
try{ #some codes throw 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 ) //獲取異常鏈中前一個(gè)異常 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異常對(duì)象主要包含異常的文本信息(message)、異常代碼/代號(hào)(code,應(yīng)該是用于開發(fā)人員標(biāo)識(shí))、異常發(fā)生的文件(file,即發(fā)生異常的php文件)、異常發(fā)生的具體位置(line,拋出異常的行號(hào))。
示例:
<?php try { throw new Exception("Some error message", 30);//拋出異常,設(shè)置異常代號(hào)為30 } catch(Exception $e) { echo "Exception:file:".$e->getFile().",message:" . $e->getMessage().",code:".$e->getCode()."line:".$e->getLine(); } ?>
瀏覽器打印結(jié)果:
Exception:file:D:\studyFolder\wamp\workspace\basicphp\testException.php,message:Some error message,code:30line:3
關(guān)于php中類與對(duì)象的基礎(chǔ)(如方法調(diào)用),具體看類與對(duì)象小節(jié)。
三、自定義異常類
示例:
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捕獲異常
當(dāng)一個(gè)try語句中可能拋出不同的異常時(shí),對(duì)應(yīng)的可有多個(gè)catch塊捕獲不同類型異常。同java中的一些注意點(diǎn):
1、大異常catch放后面。因?yàn)閽伋霎惓r(shí)按順序判斷先滿足哪個(gè)catch,一次僅執(zhí)行一個(gè)catch。
2、執(zhí)行一次try,最多執(zhí)行一個(gè)catch(發(fā)生異常時(shí)),即若前面某個(gè)catch滿足執(zhí)行,則后面的catch不再考慮。(常見考題)
五、嵌套拋出異常
結(jié)構(gòu)示例:
try{ try{ throw new Exception("第一個(gè)異常"); } catch(Exception $e1){ #相關(guān)處理 throw new Exception("處理后拋出異常");//再次拋出異常 } } catch(Exception $e2){ #相關(guān)處理 }
六、設(shè)置頂層異常處理器
set_exception_handler('myException')
:函數(shù)設(shè)置所有未捕獲的異常的處理函數(shù)句柄(函數(shù)名,此處即myException)。
示例:
<?php function myException($exception) { echo "<b>Exception:</b> " , $exception->getMessage(); } set_exception_handler('myException'); throw new Exception('Uncaught Exception occurred'); ?>
結(jié)果:
Exception:Uncaught Exception occurred
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP錯(cuò)誤與異常處理方法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP 應(yīng)用程序的安全 -- 不能違反的四條安全規(guī)則
PHP 應(yīng)用程序的安全 -- 不能違反的四條安全規(guī)則...2006-11-11php實(shí)現(xiàn)的中秋博餅游戲之繪制骰子圖案功能示例
這篇文章主要介紹了php實(shí)現(xiàn)的中秋博餅游戲之繪制骰子圖案功能,涉及php圖形繪制中位置、顏色、形狀等相關(guān)屬性設(shè)置操作技巧,需要的朋友可以參考下2017-11-11PHP數(shù)組循環(huán)操作詳細(xì)介紹 附實(shí)例代碼
PHP數(shù)組循環(huán)操作主要有兩種方式:一種是foreach,另一種是while,文章有詳細(xì)的介紹,希望對(duì)大家有幫助2013-02-02一個(gè)簡(jiǎn)潔實(shí)用的PHP緩存類完整實(shí)例
這篇文章主要介紹了一個(gè)簡(jiǎn)潔實(shí)用的PHP緩存類完整實(shí)例,緩存的應(yīng)用對(duì)于php大型項(xiàng)目的開發(fā)來說至關(guān)重要,需要的朋友可以參考下2014-07-07php使用str_replace替換多維數(shù)組的實(shí)現(xiàn)方法分析
這篇文章主要介紹了php使用str_replace替換多維數(shù)組的實(shí)現(xiàn)方法,結(jié)合具體實(shí)例對(duì)比分析了php針對(duì)多維數(shù)組的遍歷與替換操作相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2017-06-06