溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php拋出異常與捕捉特定類型的異常分別是什么意思

發(fā)布時間:2021-07-02 15:51:17 來源:億速云 閱讀:134 作者:chen 欄目:開發(fā)技術

這篇文章主要介紹“php拋出異常與捕捉特定類型的異常分別是什么意思”,在日常操作中,相信很多人在php拋出異常與捕捉特定類型的異常分別是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”php拋出異常與捕捉特定類型的異常分別是什么意思”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

什么是異常?

PHP 5 提供了一種新的面向?qū)ο蟮腻e誤處理方法。

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

當異常被觸發(fā)時,通常會發(fā)生:

      當前代碼狀態(tài)被保存

      代碼執(zhí)行被切換到預定義的異常處理器函數(shù)

      根據(jù)情況,處理器也許會從保存的代碼狀態(tài)重新開始執(zhí)行代碼,終止腳本執(zhí)行,或從代碼中另外的位置繼續(xù)執(zhí)行腳本

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

      異常的基本使用

      創(chuàng)建自定義的異常處理器

      多個異常

      重新拋出異常

      設置頂層異常處理器

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

本文的測試環(huán)境: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 address
34     //如果包裹的目的地為空
35     if(empty($parcel->address)) {
36       throw new Exception('address not Specified(未填寫地址)!');
37     } 
38 
39     //check the weight
40     //如果重量超過5
41     if($parcel->weight > 5) {
42       throw new HeavyParcelException('Parcel exceeds courier limit(包裹超過運送上限)!');
43     } 
44 
45     //otherwise we're coll
46     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 courier
60 } catch (Exception $e) {
61   echo "Someting went wrong(地址錯誤): " . $e->getMessage();
62   //exit so we don't try to proceed any further
63   exit;
64 }
65 echo '<br/>';
66 $a = 123;
67 echo $a;

從54行開始的代碼執(zhí)行順序:

55 >

32 >

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

60(捕獲到Exception) >

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

 Tips:

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

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

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

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

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

到此,關于“php拋出異常與捕捉特定類型的異常分別是什么意思”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

php
AI