五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > PHP程序員也要學(xué)會(huì)使用“異?!?/div>

PHP程序員也要學(xué)會(huì)使用“異?!?/h1>
文章來(lái)源:365jz.com     點(diǎn)擊數(shù):166    更新時(shí)間:2009-09-21 11:07   參與評(píng)論

“PHP程序員,特別是從php4,甚至是PHP3中成長(zhǎng)起來(lái)的程序員,很多都不習(xí)慣使用拋出異常這種錯(cuò)誤處理方式。雖然php5引入了異常處理機(jī)制,但是很多php程序員還是沒(méi)有真正的掌握并使用它。

網(wǎng)站完全開(kāi)放的特性,決定了網(wǎng)站比任何傳統(tǒng)軟件都更希望做到“系統(tǒng)看起來(lái)永遠(yuǎn)都是能夠正常工作的”,所以采用正確的程序錯(cuò)誤處理方式尤為重要。理論上來(lái)說(shuō),如果設(shè)計(jì)足夠完美,開(kāi)發(fā)人員足夠謹(jǐn)慎,程序出現(xiàn)錯(cuò)誤的可能為0.

但事實(shí)恰恰相反,復(fù)雜的業(yè)務(wù)邏輯,不同的硬件環(huán)境,或者不可信任的用戶(hù)輸入,都可能導(dǎo)致程序出錯(cuò),服務(wù)當(dāng)機(jī)。所以在稍微有點(diǎn)復(fù)雜的系統(tǒng)中,有個(gè)完善的錯(cuò)誤機(jī)制是必須的。

在php5之前,因?yàn)槿狈?duì)異常的支持。在做復(fù)雜的開(kāi)發(fā)時(shí),常常采取比較原始的“處理錯(cuò)誤數(shù)值+記錄log”的處理形式。

如:

function getResult($a,$b)

{

    .......

    if  fatal error occur

     return "error_type1";

  .....

 }

$result = getResult($a,$b);//理論上,getResult函數(shù)總能正確的返回$result

if($result=='error_type1')//但在一些特殊情況.$result無(wú)法正常取得

{

      writeLog('result  is empty!');//記錄下log

      die();//或者其他更“友好的”處理方式

}

理論上,通過(guò)“處理錯(cuò)誤數(shù)值+記錄log”的方式也可以達(dá)到我們的目標(biāo)(事實(shí)上確實(shí)如此,在php3,php4的時(shí)候,已經(jīng)出現(xiàn)了很多成功且足夠復(fù)雜的系統(tǒng),他們甚至考慮到所有的情況,因此不需要記錄任何log)。但技術(shù)總要向前發(fā)展的,更何況,決大多數(shù)的開(kāi)發(fā)人員并不具備牛人的嚴(yán)謹(jǐn)?shù)降嗡宦┑乃季S,所以我們還是不得不認(rèn)真思考“如何處理程序錯(cuò)誤”的問(wèn)題。

上面的“錯(cuò)誤處理+記錄log”的方式,存在如下弊端:

1    如果錯(cuò)誤情況太多,那相應(yīng)的錯(cuò)誤處理代碼需要增加很多,這非常損害程序的可讀性。你的程序看起來(lái)是“斷斷續(xù)續(xù)的”。

2    如果程序的邏輯很復(fù)雜(比如程序的函數(shù)調(diào)用非常復(fù)雜,如在 getResult2()函數(shù) 中調(diào)用 getResult() 的情況,甚至更復(fù)雜的多級(jí)嵌套的情況),那錯(cuò)誤數(shù)值的傳遞處理會(huì)讓你疲于奔命。因?yàn)闉榱舜_保錯(cuò)誤能夠得到有效的處理,你必須保證: 以無(wú)損耗的方式傳遞錯(cuò)誤數(shù)值。

所以,改變這種原始的錯(cuò)誤處理方式吧。引入異常處理機(jī)制,你會(huì)發(fā)現(xiàn)可喜的變化:

1    代碼可讀性大大增強(qiáng)。開(kāi)發(fā)程序時(shí)邏輯思維變得很連貫,在“可疑的”地方,你只要拋出個(gè)異常就可以了。至于怎么處理,完全可以等到后面再去補(bǔ)充。當(dāng)然,對(duì)于程序的讀者,也不會(huì)覺(jué)得有被打斷的感覺(jué)。

2    再也不需要考慮“錯(cuò)誤數(shù)值如何無(wú)損耗的進(jìn)行傳遞”這種費(fèi)力又不怎么討好的問(wèn)題了。因?yàn)楫惓O蛏蟼鬟f的特性,你的函數(shù)嵌套個(gè)2層,3層,再多層都沒(méi)有問(wèn)題。你只需要在外層有捕獲異常的操作就可以了。

3    異常可以自由的定制,你可以按照功能對(duì)異常進(jìn)行分類(lèi),更好的管理各種程序錯(cuò)誤。同時(shí)對(duì)于你也可以更靈活的定制異常的處理方式。比如,在異常類(lèi)里面實(shí)現(xiàn)記錄log的功能等。

當(dāng)然,是否使用異常要根據(jù)需求而定。php的一大特性就是部署快,如果是很小的項(xiàng)目,邏輯很簡(jiǎn)單,那使用一般的錯(cuò)誤數(shù)值處理方式也許能夠更快的部署。 

Tag標(biāo)簽: php,異常,錯(cuò)誤處理

作者資料:
rethink
我的主頁(yè)  個(gè)人資料
我的閃存  與我聯(lián)系

如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (166人查看,0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱(chēng):
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢(xún)

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)