您好,登錄后才能下訂單哦!
本篇內容介紹了“如何理解PHP中的異常處理情況”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
PHP中的錯誤和異常處理在PHP中是非常常用的,在我們的日常開發中,肯定會遇到比如忘記加分號了、函數名寫錯或者函數被重新定義了等等很多的錯誤,如果說在開發過程中,能夠發現錯誤顯示錯誤,那肯定對我們的開發是十分有利的。
因此,在開發項目的時候合理使用一場處理,會有助于我們發現錯誤改正錯誤以加快開發速度。那接下來我們就一起來看一看應該怎樣去了解我們的錯誤處理。
PHP中的異常處理類
在PHP中就提供了內置的異常處理類,也就是Exception
,這個類包含了一些處理異常的函數,這些函數可以捕獲程序異常和錯誤。
那下面列舉出該類中較為常用的函數:
getTraceAsString()
:返回已格式化成字符串的、由函數 getTrace() 函數所產生的信息
__toString()
:產生異常的字符串信息,它可以重載。注意,該函數最前部是兩個下劃線
getMessage()
:返回異常的消息內容
getLine()
:返回發生錯誤的代碼行號
getCode()
:以數字形式返回異常代碼
getFile()
:返回發生異常的文件名
getTrace()
:返回 backtrace() 數組
捕獲程序中的異常
程序中的異常出現一般不會自己顯現出來,這時候我們可以通過try catch
語句和 throw
關鍵字,來達到捕捉程序中異常的目的。
try catch語句和流程控制的語句類似,throw關鍵字可以拋出一個異常,我們可以通過類似條件選擇的結構來完成捕獲程序中的異常。try catch語句的語法格式如下:
try{ // 可能出現異常或錯誤的代碼,比如文件操作、數據庫操作等 }catch(Exception $a){ // $a 為一個異常類的對象 // 輸出錯誤信息 }
在我們需要進行捕捉程序異常時,需要把需要捕捉的代碼放入try代碼塊里面,在上述語法中,每一個try應該至少有一個與之對應的catch。當try代碼塊沒有catch匹配的異常時,代碼就會跳轉到最后一個catch后面繼續進行。
在其中產生的異常都可以被throw語句跑出來并且被catch捕獲,當有一個異常出現的時候,在其后面的代碼就不會再繼續執行了。
示例如下:
<?php try{ $err = '拋出異常信息,并跳出 try 語句塊'; if(is_dir('./demo')){ echo '這里是一些可能會發生異常的代碼'; }else{ throw new Exception($err, 20211020); // 拋出異常 } echo '上面拋出異常的話,這行代碼將不會執行,轉而執行 catch 中的代碼。<br>'; }catch(Exception $e){ echo '捕獲異常:'.$e->getMessage().'<br>錯誤代碼:'.$e->getCode().'<br>'; } echo '繼續執行 try catch 語句之外的代碼'; ?>
輸出結果:
再上述示例中,通過try語句試圖判斷當前目錄下有沒有名為demo的目錄,目錄不存在,所以執行了throw關鍵字拋出異常。異常發現拋出后,try語句的剩下語句就不會在運行了。
創建自己的異常類
PHP中可以事先定義一些異常,因為PHP中很少會主動的拋出異常,當事先定義好異常后,我們可以通過if-else來對可能出現的異常進行判斷,手動來拋出異常,再PHP中經常能夠使用到我們自己創建的異常類。
示例如下:
<?php class emailException extends Exception{ function __toString(){ return "<b>email is null</b>file:".$this->getFile().',line:'. $this->getLine(); } } class nameException extends Exception{ } ?>
上述示例中,定義了兩個異常類,都繼承自 Exception 基類。
在實際的業務中,我們也會根據不同的需求來拋出不同的異常,示例如下:
function reg($reg) { if (empty($reg['email'])) { throw new emailException("emaill is null", 1); } if(empty($reg['name'])) { throw new nameException("name is null", 2); } }
在執行業務代碼時,可以使用if語句來判斷異常會發生的地方,然后手動拋出異常,通過語句實現將不同的異常分發給不同的異常類處理;再下面這段示例中,根據不同的情況捕獲不同的異常,當第一個catch捕獲了異常,即使程序中依然存在其他異常,也會跳過其他的catch代碼塊。無論程序中有沒有出現異常,最后的finally中的語句都會執行的。示例如下:
try{ $reg = array('phone'=>'1888888888'); reg($reg); } catch(emailException $e) { echo $e; } catch(nameException $e) { echo 'error msg:' .$e->getMessage().'error code:'.$e->getCode(); } finally { echo ' finally'; }
“如何理解PHP中的異常處理情況”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。