簡單的說說php異常

  • 2019 年 12 月 19 日
  • 筆記

php異常

php的異常處理是一個爭議較大的功能,有的人覺得php的異常是一個很雞肋的存在,而大多數的程式碼功能實現,都用到了異常,所以,本人根據自己一年多的程式碼經驗,說說自己的理解吧

什麼是異常?

現在網上,應該有很多關於異常的解釋,我就隨便複製一段吧:

程式在運行中出現不符合預期的情況,允許發生(你也不想讓他出現不正常的情況)但他是一種不正常的情況,按照我們的正常邏輯本不該出的錯誤,但仍然會出現的錯誤,屬於邏輯和業務流程的錯誤,而不是編譯或者語法上的錯誤。

可能這句話有點繞,通俗點解釋就是:"知道可能會出現錯誤的情況,就叫異常"

比如$num_1/$num_2,當num_2是0是會出錯,而你知道可能會出現這個錯誤,那就叫異常

比如getinfo($phone),$phone為空時可能查不出數據,而你知道可能有這個情況,這就叫異常

異常的處理

在php中,需要使用Try, throw 和 catch 3個語句去進行嘗試,拋出異常 和捕獲異常,例如:

<?php    $num_1=1;  $num_2=0;    try{      if((int)$num_2==0){          throw new Exception('num_2不能為0!');      }      echo (int)$num_1/(int)$num_2;        }catch (Exception $exception) {      var_dump($exception->getMessage());  }

注意:當一個異常拋出,沒有進行相應的處理(沒有try catch對應的異常類,沒有使用set_exception_handler函數進行攔截)

將會報出一個致命錯誤

php的異常能捕獲錯誤嗎?

首先,先搞清楚異常的定義(上文),而錯誤,並不是已知的,並不屬於異常

在php7版本以下,任何php產生的錯誤,都不是異常.而在php7之後,錯誤可以使用捕獲異常處理的方法進行捕獲

再然後,可以使用php的register_shutdown_function,set_error_handler,set_exception_handler進行變相的捕獲錯誤

應用場景:

在層級較深的框架,業務邏輯中,是有很大的必要使用異常的

資料庫事務處理時可使用異常

業務邏輯判斷返回層級較高時(比如你調用a,a調用b,b調用c,c需要報一個錯誤,如果直接一層一層返回上去,太難看了),也可以使用異常

總結:

php異常應用場景很多,並且都是可用的場景,根據定義,可知道,異常本身就是已知的錯誤,本身就是需要if  else判斷進行拋出的,

當有人說php異常是雞肋的,不能自動捕獲異常,不能直接捕獲錯誤時,我笑的我八塊腹肌都出來了

所以不存在雞肋一說,雞肋,只能說明你用錯了地方.異常本身的定義,應用場景都沒搞懂,談什麼雞肋

本文為仙士可原創文章,轉載無需和我聯繫,但請註明來自仙士可部落格www.php20.cn

Tags: