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

首頁 > 語言 > PHP > 正文

php拋出異常與捕捉特定類型的異常詳解

2024-05-04 23:51:29
字體:
來源:轉載
供稿:網友

什么是異常?

PHP 5 提供了一種新的面向對象的錯誤處理方法。

異常處理用于在指定的錯誤(異常)情況發生時改變腳本的正常流程。這種情況稱為異常。

當異常被觸發時,通常會發生:

      當前代碼狀態被保存

      代碼執行被切換到預定義的異常處理器函數

      根據情況,處理器也許會從保存的代碼狀態重新開始執行代碼,終止腳本執行,或從代碼中另外的位置繼續執行腳本

我們將展示不同的錯誤處理方法:

      異常的基本使用

      創建自定義的異常處理器

      多個異常

      重新拋出異常

      設置頂層異常處理器

php拋出異常與捕捉特定類型的異常最終的目的還是要給出對應的解決辦法,讓代碼可以繼續運行。

本文的測試環境:PHP5.5.36  Safari 9.1.2

 1 <?php 2 header("content-type:text/html; charset=utf-8"); 3 /** 4 * 包裹重量異常 5 */ 6 class HeavyParcelException extends Exception {} 7  8 /** 9 * 包裹類10 */11 class Parcel {12 13   /**14   * 包裹寄送目的地地址15   */16   public $address;17 18   /**19   * 包裹重量20   */21   public $weight;22 }23 24 /**25 * 派送員26 */27 class Courier {28  29   /** 30   * 運送31   */32   public function ship(Parcel $parcel) {33     //check we have an address34     //如果包裹的目的地為空35     if(empty($parcel->address)) {36       throw new Exception('address not Specified(未填寫地址)!');37     } 38 39     //check the weight40     //如果重量超過541     if($parcel->weight > 5) {42       throw new HeavyParcelException('Parcel exceeds courier limit(包裹超過運送上限)!');43     } 44 45     //otherwise we're coll46     return true;47   }48 }49 50 $myCourier = new Courier();51 $parcel = new Parcel();52 //add the address if we have it 為了測試這里不填寫地址53 $parcel->weight = 7;54 try {55   $myCourier->ship($parcel);56   echo "parcel shipped";57 } catch (HeavyParcelException $e) {//捕獲HeavyParcelException 不寫這個異常的類型名字,就跑到普通Exception拋出去了58   echo "Parcel weight error(重量錯誤): " . $e->getMessage();59   //redirect them to choose another courier60 } catch (Exception $e) {61   echo "Someting went wrong(地址錯誤): " . $e->getMessage();62   //exit so we don't try to proceed any further63   exit;64 }65 echo '<br/>';66 $a = 123;67 echo $a;

從54行開始的代碼執行順序:

55 >

32 >

35(ship方法中先檢查的是地址為空,這里會拋出Exception,而非57行的HeavyParcelException) >

60(捕獲到Exception) >

616263 輸出地址錯誤 exit;不會輸出65到67行了

 Tips:

 我感覺這一塊最重要的就是搞清楚代碼執行的順序。寫幾段,然后改一改跑一跑。

 1.捕獲的順序,要看try中的代碼中throw的是哪個類型的Exception,然后才看 catch里的順序。

 2.57行的捕獲的是特定的類型HeavyParcelException不能寫錯,或寫Exception都會有問題。可以自己試試。

  1)例如地址不為空,57行寫成了HeavyParcelException111,就會,在60行它的父類對象中捕獲到,重量錯誤。這不是我們想要的。

      2)例如地址為空,57行寫成了Exception,會拋出地址錯誤,但捕獲的卻是本來負責重量的catch。這也不是我們想要的。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 乃东县| 阿拉善左旗| 南康市| 东安县| 扶绥县| 色达县| 西华县| 庄浪县| 仙游县| 剑川县| 南昌市| 开化县| 肇源县| 铁力市| 三都| 那坡县| 新田县| 平陆县| 宁河县| 德江县| 富裕县| 大英县| 孟连| 繁昌县| 鄱阳县| 新蔡县| 奉化市| 沈阳市| 肇源县| 灌云县| 宝坻区| 新宁县| 灌南县| 博乐市| 纳雍县| 科技| 大同市| 牡丹江市| 金山区| 芷江| 永胜县|