首頁  >  文章  >  後端開發  >  修真的電腦程式設計師 PHP 程式設計師也要學會使用“異常”

修真的電腦程式設計師 PHP 程式設計師也要學會使用“異常”

WBOY
WBOY原創
2016-07-29 08:40:03833瀏覽

網站完全開放的特性,決定了網站比任何傳統軟體都更希望做到“系統看起來永遠都是能夠正常工作的”,所以採用正確的程序錯誤處理方式尤為重要。理論上來說,如果設計夠完美,開發人員夠謹慎,程式出現錯誤的可能為0.
但事實恰恰相反,複雜的業務邏輯,不同的硬體環境,或不可信任的使用者輸入,都可能導致程序出錯,服務當機。所以在稍微有點複雜的系統中,有個完善的錯誤機制是必須的。
在php5之前,因為缺乏對異常的支援。在做複雜的開發時,常採取比較原始的「處理錯誤數值+記錄log」的處理形式。
如:

複製程式碼 程式碼如下:


function getResult($a,$b)
{🎜>function getResult($a,$b)
{
.......
if fatal error occur
return "error_type1";
.....
}
$result = getResult($a,$b );//理論上,getResult函數總是能正確的回傳$result
if($result=='error_type1')//但在一些特殊情況.$result無法正常取得
{
writeLog ('result is empty!');//記錄下log
die();//或其他更「友善」的處理方式
}



理論上,透過「處理錯誤數值+記錄log」的方式也可以達到我們的目標(事實上確實如此,在php3,php4的時候,已經出現了很多成功且足夠複雜的系統,他們甚至考慮到所有的情況,因此不需要記錄任何log)。但技術總要向前發展的,更何況,決大多數的開發人員並不具備牛人的嚴謹到滴水不漏的思維,所以我們還是不得不認真思考「如何處理程序錯誤」的問題。
上面的「錯誤處理+記錄log」的方式,有以下弊端:
1 如果錯誤情況太多,那麼對應的錯誤處理程式碼需要增加很多,這非常損害程式的可讀性。你的程式看起來是「斷斷續續的」。
2 如果程式的邏輯很複雜(例如程式的函數呼叫非常複雜,如在getResult2()函數中呼叫getResult() 的情況,甚至是更複雜的多層巢狀的情況),那麼錯誤數值的傳遞處理會讓你疲於奔命。因為為了確保錯誤能夠得到有效的處理,你必須保證: 以無損耗的方式傳遞錯誤數值。
所以,改變這種原始的錯誤處理方式吧。引入異常處理機制,你會發現可喜的變化:
1 程式碼可讀性大大增強。開發程式時邏輯思維變得很連貫,在「可疑的」地方,你只要拋出個異常就可以了。至於怎麼處理,完全可以等到後面再補充。當然,對於程式的讀者,也不會覺得有被打斷的感覺。
2 再也不需要考慮「錯誤數值如何無損耗的進行傳遞」這種費力又不怎麼討好的問題了。因為異常向上傳遞的特性,你的函數嵌套個2層,3層,再多層都沒有問題。你只需要在外層有捕獲異常的操作就可以了。
3 異常可以自由的定制,你可以按照功能對異常進行分類,更好的管理各種程序錯誤。同時對於你也可以更靈活的客製化異常的處理方式。例如,在異常類別裡面實作記錄log的功能等。

當然,是否使用異常要根據需求而定。 php的一大特性就是部署快,如果是很小的項目,邏輯很簡單,那麼使用一般的錯誤數值處理方式也許能夠更快的部署。

以上就介紹了修真的電腦程式設計師 PHP 程式設計師也要學會使用“異常”,包括了修真的電腦程式設計師方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn