首頁 >後端開發 >php教程 >使用php異常處理類別Exception的例子

使用php異常處理類別Exception的例子

WBOY
WBOY原創
2016-07-25 09:05:311324瀏覽
  1. class Exception
  2. {
  3. protected $message = 'Unknown exception'; // 異常訊息
  4. protec🎜>protected $ 0; // 使用者自訂異常碼
  5. protected $file; // 發生異常的檔名
  6. protected $line; // 發生異常的程式碼行號
  7. function __construct($message = null, $ code = 0);
  8. final function getMessage(); // 傳回例外訊息
  9. final function getCode(); // 傳回例外碼
  10. final function getFile(); // 傳回發生異常的檔案名稱
  11. final function getLine(); // 傳回異常發生的程式碼行號
  12. final function getTrace(); // backtrace() 陣列
  13. final function getTraceAsString(); // 已格化成字串的getTrace() 訊息
  14. /* 可重載的方法*/
  15. function __toString(); // 可輸出的字串
  16. }
  17. ?>
複製程式碼

簡單範例:(透過異常,拋出錯誤訊息)

  1. try {
  2. $error = 'my error!';
  3. throw new Exception($error)
  4. } catch (Exception $e) {
  5. echo $e->getMessage();
  6. }
複製程式碼

2、擴充此類

  1. class MyException extends Exception
  2. {
  3. // 重定義建構子使message 變成必須被指定的屬性
  4. public function __construct($message, $code = 0) {
  5. // 自訂的程式碼
  6. // 確保所有變數都正確賦值
  7. parent::__construct($message, $code );
  8. }
  9. // 自訂字串輸出的樣式
  10. public function __toString() {
  11. return __CLASS__ . ": [{$this->code}]: {$this-> message}n";
  12. }
  13. public function customFunction() {
  14. echo "A Custom function for this type of exceptionn";
  15. }
  16. }
複製程式碼

異常處理的基本想法是程式碼在try程式碼被呼叫執行。如果try碼區塊出現錯誤,我們可以執行一個拋出異常的處理。某些程式語言,如java,,在特定情況下將自動拋出異常。在php中,異常必須手動拋出。可以使用以下方式拋出一個例外:   Throw new Exception(‘message',code);   Throw 關鍵字將觸發異常處理機制,它是一個語言結構,而不是一個函數,但是必須給它一個值。它要求一個接受對象。在最簡單的情況下,可以實例化一個內建的Exception類別。   最後,在try程式碼之後,必須至少給予一個catch程式碼區塊。可以將多個catch程式碼區塊與一個try程式碼區塊進行關聯。如果每個catch程式碼區塊可以捕捉一個不同類型的異常,可以使用多個catch程式碼區塊是有意義的。 例如,如果想捕獲Exception類別的異常。

  1. Catch(Exception $e)
  2. {
  3. //handing exception
  4. }
//handing exception
} //handing exception
}

//handing exception

}

//handing exception
}
  1. 複製程式碼
  2. Catch程式碼擷取的物件就是導致異常並傳遞給throw語句的物件(被throw 語句拋出)。使用Exception 類別的實例,是不錯的選擇。 Exception類別提供瞭如下的內建方法:   Getcode()   —傳回傳遞給建構子的程式碼。   GetMessage() —傳回傳遞給建構子的訊息。   getFile()     —傳回產生異常碼的檔案的路徑   getLine()    —傳回產生異常的程式碼所在的行。
  3. 注意: 當捕獲到一個異常後,try()區塊裡面的後續程式碼將不會繼續執行,而是會嘗試尋找匹配的「catch」程式碼區塊。 當拋出一個異常後,如果不進行catch處理,則會報「Uncaught exception 'Exception'」錯誤。
function test($val){if ($val>100){throw new Exception("提示訊息:您輸入的值過大");}}test(111);?>複製程式碼

3.當一個異常拋出後,catch語句區塊是否進行處理應區別對待。 用戶註冊功能的部分程式碼

  1. try{
  2. //check forms filled in
  3. if(!filled_out($_POST)){
  4. throw new Exception('你還沒填寫表單,請回去填寫');
  5. }
  6. //check email address not valid
  7. if(!check_email($email)){
  8. throw new Exception('郵件的格式不正確');
  9. }
  10. //檢查密度的長度是否大於6
  11. if(strlen($passwdthrow new Exception('密度的長度應大於6');
  12. }
  13. //檢查兩次密碼是否相等http://bbs.it-home.org
  14. if($passwd!=$passwd1){
  15. throw new Exception('兩次密碼不一樣,請重新輸入');
  16. }
  17. //檢查使用者名稱的長度是否正確
  18. if(strlen($username)>16){
  19. throw new Exception('使用者名稱的長度不符,請重新輸入');
  20. }
  21. } catch(Exception $e){
  22. echo $e->getMessage(); //輸出例外。
  23. }
  24. ?>
複製程式碼


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn