【筆記】異常處理

異常處理
拋出和捕獲異常
try          功能檢查異常
catch      捕獲異常
throw     拋出異常
try{
    ...
    throw new Exception($errmsg,$errcode)
}catch(Exception $e){
    ...
}

try之後至少要有一個catch,成對出現

基本異常類
Exception
1.接受兩個參數          錯誤信息和錯誤代碼
2.內置方法
    getMessage          返回傳遞給構造函數的方法
    getCode               返回傳遞給構造函數的代碼
    getFile               返回發生異常的代碼文件路徑
    getLine               返回代碼行號
    __tostring          輸出所有異常信息

3.擴展基本異常類     繼承Exception
    <?php
         try {
              $num = 0;
              if($num == 0){
                   $errmsg = "除數不能爲0";
                   throw new newException($num);
              }else {
                   echo 500/$num;
              }

         } catch (newException $e) {
              $e->errMessage();
         }

         class  newException extends Exception{
              function errMessage(){
                   echo "錯誤信息:"."除數".$this->getMessage()."不能爲零<br>";
                   echo "錯誤文件:".$this->getFile()."<br>";
                   echo "錯誤行:".$this->getLine();
              }
         }
    ?>
4.捕獲多個異常
    使用if和else或者swith
    捕獲異常是往往仍然需要捕獲Exception類,來處理捕獲的異常
    從上往下的順序,如果先捕獲Exception類導致不能被正確的代碼執行,特定的異常寫在前面,一般異常的catch寫在後面
    示例:    
         class customException extends Exception{
              public function errMessage(){
                   $errMsg = "錯誤信息:".$this->getMessage()."<br>";
                   $errMsg.="錯誤文件路徑:".$this->getFile()."<br>";
                   $errMsg.="錯誤代碼行號:".$this->getLine();
                   return $errMsg;
              }
         }
         $email = "[email protected]";
         try {
              if(filter_var($email,FILTER_VALIDATE_EMAIL)==FALSE){
                   throw new customException("<b>".$email."</b>錯誤的郵箱地址");
              }
              if(strpos($email,"example")!=FALSE){
                   throw new customException("<b>".$email."</b>是一個example電子郵件地址");
              }
         }catch (customException $e){
              echo $e->errMessage();
         }
         catch (Exception $e) {
              echo $e->getMessage();
         }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章