-
-
class Exception
- {
- protected $message = 'Unknown exception'; // 異常訊息
- protec🎜>protected $ 0; // 使用者自訂異常碼
- protected $file; // 發生異常的檔名
- protected $line; // 發生異常的程式碼行號
- function __construct($message = null, $ code = 0);
- final function getMessage(); // 傳回例外訊息
- final function getCode(); // 傳回例外碼
- final function getFile(); // 傳回發生異常的檔案名稱
- final function getLine(); // 傳回異常發生的程式碼行號
- final function getTrace(); // backtrace() 陣列
- final function getTraceAsString(); // 已格化成字串的getTrace() 訊息
- /* 可重載的方法*/
- function __toString(); // 可輸出的字串
- }
- ?>
複製程式碼
簡單範例:(透過異常,拋出錯誤訊息)
-
-
try {
- $error = 'my error!';
- throw new Exception($error)
- } catch (Exception $e) {
- echo $e->getMessage();
- }
複製程式碼
2、擴充此類
-
-
class MyException extends Exception
- {
- // 重定義建構子使message 變成必須被指定的屬性
- public function __construct($message, $code = 0) {
- // 自訂的程式碼
- // 確保所有變數都正確賦值
- parent::__construct($message, $code );
- }
- // 自訂字串輸出的樣式
- public function __toString() {
- return __CLASS__ . ": [{$this->code}]: {$this-> message}n";
- }
- public function customFunction() {
- echo "A Custom function for this type of exceptionn";
- }
- }
複製程式碼
異常處理的基本想法是程式碼在try程式碼被呼叫執行。如果try碼區塊出現錯誤,我們可以執行一個拋出異常的處理。某些程式語言,如java,,在特定情況下將自動拋出異常。在php中,異常必須手動拋出。可以使用以下方式拋出一個例外:
Throw new Exception(‘message',code);
Throw 關鍵字將觸發異常處理機制,它是一個語言結構,而不是一個函數,但是必須給它一個值。它要求一個接受對象。在最簡單的情況下,可以實例化一個內建的Exception類別。
最後,在try程式碼之後,必須至少給予一個catch程式碼區塊。可以將多個catch程式碼區塊與一個try程式碼區塊進行關聯。如果每個catch程式碼區塊可以捕捉一個不同類型的異常,可以使用多個catch程式碼區塊是有意義的。
例如,如果想捕獲Exception類別的異常。
-
-
Catch(Exception $e)
- {
- //handing exception
- }
-
//handing exception } //handing exception } //handing exception} //handing exception } -
-
- 複製程式碼
-
-
- Catch程式碼擷取的物件就是導致異常並傳遞給throw語句的物件(被throw 語句拋出)。使用Exception 類別的實例,是不錯的選擇。
Exception類別提供瞭如下的內建方法:
Getcode() —傳回傳遞給建構子的程式碼。
GetMessage() —傳回傳遞給建構子的訊息。
getFile() —傳回產生異常碼的檔案的路徑
getLine() —傳回產生異常的程式碼所在的行。
-
- 注意:
當捕獲到一個異常後,try()區塊裡面的後續程式碼將不會繼續執行,而是會嘗試尋找匹配的「catch」程式碼區塊。
當拋出一個異常後,如果不進行catch處理,則會報「Uncaught exception 'Exception'」錯誤。
-
function test($val){if ($val>100){throw new Exception("提示訊息:您輸入的值過大");}}test(111);?>複製程式碼3.當一個異常拋出後,catch語句區塊是否進行處理應區別對待。
用戶註冊功能的部分程式碼
-
-
try{
- //check forms filled in
- if(!filled_out($_POST)){
- throw new Exception('你還沒填寫表單,請回去填寫');
- }
- //check email address not valid
- if(!check_email($email)){
- throw new Exception('郵件的格式不正確');
- }
- //檢查密度的長度是否大於6
- if(strlen($passwdthrow new Exception('密度的長度應大於6');
- }
- //檢查兩次密碼是否相等http://bbs.it-home.org
- if($passwd!=$passwd1){
- throw new Exception('兩次密碼不一樣,請重新輸入');
- }
- //檢查使用者名稱的長度是否正確
- if(strlen($username)>16){
- throw new Exception('使用者名稱的長度不符,請重新輸入');
- }
- } catch(Exception $e){
- echo $e->getMessage(); //輸出例外。
- }
- ?>
複製程式碼
|