国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語言 > PHP > 正文

PHP中Exception異常處理類的使用詳解

2024-09-04 11:44:01
字體:
供稿:網(wǎng)友

本文章介紹了在php中常用的簡(jiǎn)單的異常處理類,我們主要是講述到了Exception處理,代碼如下:

  1. <?php 
  2.     try { 
  3.         $a=10/0; 
  4.     }catch (Exception $e){ 
  5.         echo "拋出異常"
  6.     } 
  7. ?> 

以上代碼,并不會(huì)輸出“拋出異常”,而是輸出了錯(cuò)誤信息:Warning: Division by zero in......

說明:try塊中并沒有拋出異常,而是按照系統(tǒng)默認(rèn)的錯(cuò)誤處理機(jī)制進(jìn)行處理,所以能不能捕獲到異常,取決于有沒有真正的拋出異常.代碼如下:

  1. <?php 
  2. class Exception 
  3.     protected $message = 'Unknown exception';   // 異常信息 
  4.     protected $code = 0;                        // 用戶自定義異常代碼 
  5.     protected $file;                            // 發(fā)生異常的文件名 
  6.     protected $line;                            // 發(fā)生異常的代碼行號(hào) 
  7.     function __construct($message = null, $code = 0); 
  8.     final function getMessage();                // 返回異常信息 
  9.     final function getCode();                   // 返回異常代碼 
  10.     final function getFile();                   // 返回發(fā)生異常的文件名 
  11.     final function getLine();                   // 返回發(fā)生異常的代碼行號(hào) 
  12.     final function getTrace();                  // backtrace() 數(shù)組 
  13.     final function getTraceAsString();          // 已格成化成字符串的 getTrace() 信息 
  14.     /* 可重載的方法 */ 
  15.     function __toString();                       // 可輸出的字符串 
  16. ?> 

簡(jiǎn)單的使用如下:(通過異常,拋出錯(cuò)誤信息),代碼如下:

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

我們可以擴(kuò)展此類,方便我們的使用,代碼如下:

  1. class MyException extends Exception 
  2.     // 重定義構(gòu)造器使 message 變?yōu)楸仨毐恢付ǖ膶傩?/span> 
  3.     public function __construct($message$code = 0) { 
  4.         // 自定義的代碼 
  5.         // 確保所有變量都被正確賦值 
  6.         parent::__construct($message$code); 
  7.     } 
  8.     // 自定義字符串輸出的樣式 
  9.     public function __toString() { 
  10.         return __CLASS__ . ": [{$this->code}]: {$this->message}n"
  11.     } 
  12.     public function customFunction() { 
  13.         echo "A Custom function for this type of exceptionn"
  14.     } 

異常處理的基本思想是代碼在try代碼被調(diào)用執(zhí)行。如果try碼塊出現(xiàn)錯(cuò)誤,我們可以執(zhí)行一個(gè)拋出異常的處理,某些編程語言,如java,在特定情況下將自動(dòng)拋出異常。在php中,異常必須手動(dòng)拋出,可以使用如下方式拋出一個(gè)異常,代碼如下:

Throw new Exception(‘message’,code);

Throw 關(guān)鍵字將觸發(fā)異常處理機(jī)制,它是一個(gè)語言結(jié)構(gòu),而不是一個(gè)函數(shù),但是必須給它傳遞一個(gè)值。它要求一個(gè)接受對(duì)象。在最簡(jiǎn)單的情況下,可以實(shí)例化一個(gè)內(nèi)置的Exception類。

最后,在try代碼之后,必須至少給出一個(gè)catch代碼塊。可以將多個(gè)catch代碼塊與一個(gè)try代碼塊進(jìn)行關(guān)聯(lián)。如果每個(gè)catch代碼塊可以捕獲一個(gè)不同類型的異常,可以使用多個(gè)catch代碼塊是有意義的。例如,如果想捕獲Exception類的異常,代碼如下

  1. Catch(Exception $e
  2.    //handing exception 

Catch代碼捕獲的對(duì)象就是導(dǎo)致異常并傳遞給throw語句的對(duì)象(被throw 語句拋出)。使用Exception 類的實(shí)例,是不錯(cuò)的選擇。

Exception類提供了如下的內(nèi)置方法:

Getcode() —返回傳遞給構(gòu)造函數(shù)的代碼。

GetMessage()  —返回傳遞給構(gòu)造函數(shù)的消息。

getFile() —返回產(chǎn)生異常代碼的文件的路徑

getLine() —返回產(chǎn)生異常的代碼所在的行。

注意:當(dāng)捕獲到一個(gè)異常后,try()塊里面的后續(xù)代碼將不會(huì)繼續(xù)執(zhí)行,而是會(huì)嘗試查找匹配的“catch”代碼塊,當(dāng)拋出一個(gè)異常后,如果不進(jìn)行catch處理,則會(huì)報(bào)“Uncaught exception 'Exception'”錯(cuò)誤,代碼如下:

  1. <?php 
  2.     function test($val){ 
  3.         if ($val>100){ 
  4.             throw new Exception("提示信息:您輸入的值過大"); 
  5.         } 
  6.     } 
  7.     test(111); 
  8. ?> 

當(dāng)一個(gè)異常拋出后,catch語句塊可以進(jìn)行處理也可以不處理,以下是我用戶注冊(cè)功能的部分代碼

  1. try{ 
  2.      //check forms filled in 
  3.      if(!filled_out($_POST)){ 
  4.          throw new Exception('你還沒有填寫表單,請(qǐng)回去填寫'); 
  5.      } 
  6.      //check email address not valid 
  7.      if(!check_email($email)){ 
  8.         throw new Exception('郵件的格式不正確'); 
  9.      } 
  10.      //檢查密度的長(zhǎng)度是否大于6 
  11.      if(strlen($passwd<6)){ 
  12.          throw new Exception('密度的長(zhǎng)度應(yīng)該大于6'); 
  13.      } 
  14.      //檢查兩次密碼是否相等 
  15.      if($passwd!=$passwd1){ 
  16.          throw new Exception('兩次密碼不一樣,請(qǐng)重新輸入'); 
  17.      } 
  18.      //檢查用戶名的長(zhǎng)度是否正確 
  19.      if(strlen($username)>16){ 
  20.          throw new Exception('用戶名的長(zhǎng)度不符,請(qǐng)重新輸入'); 
  21.      } 
  22.     
  23.  } catch(Exception $e){ 
  24.      echo $e->getMessage(); //輸出異常信息。 
  25.  } 

php對(duì)異常的處理與java一樣,用到的是try{}catch(){},定義頂級(jí)異常處理器用到的函數(shù)是:set_exception_handler("My_exception");這里的My_expection是開發(fā)者自定義的異常處理函數(shù),既頂級(jí)異常處理器,只有當(dāng)程序中沒有函數(shù)來處理異常才有頂級(jí)異常處理器來處理異常,如果沒有定義頂級(jí)異常處理器,則由系統(tǒng)默認(rèn)的異常處理器來處理異常,舉例說明:

  1. <meta http-equiv="content-type" content="text/html;charset=utf-8" /><?php 
  2.     set_exception_handler("My_expection"); 
  3.     function My_expection(){ 
  4.         echo "這里是頂級(jí)異常處理器"
  5.     } 
  6.     try{ 
  7.         nohello("hello"); 
  8.     }catch(Exception $e){ 
  9.         throw $e
  10.     } 
  11.   function nohello($nohello){ 
  12.           if($nohello == "hello"){ 
  13.               throw new Exception("不能輸入hello"); 
  14.           }else
  15.             echo "輸入成功"
  16.         } 
  17.     } 
  18. ?> 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 科技| 调兵山市| 淳化县| 乐至县| 内江市| 克拉玛依市| 唐海县| 丰顺县| 乐东| 新巴尔虎右旗| 宝应县| 基隆市| 江阴市| 绥芬河市| 临邑县| 鄄城县| 九江县| 建始县| 云安县| 怀来县| 高陵县| 汉川市| 富锦市| 开江县| 定州市| 桓台县| 铜山县| 文昌市| 改则县| 密山市| 永春县| 宝丰县| 岫岩| 新巴尔虎右旗| 上蔡县| 蒲城县| 吉安县| 南充市| 康马县| 昌乐县| 金平|