PHP中的防御性編程_第1頁
PHP中的防御性編程_第2頁
PHP中的防御性編程_第3頁
PHP中的防御性編程_第4頁
PHP中的防御性編程_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——PHP中的防御性編程PHP中的防衛(wèi)性編程

評價一個編程的好壞,就是看該程序是否把用戶可能發(fā)生的故障點想到的多全面。下面是我用心為大家整理的PHP中的防衛(wèi)性編程,夢想對大家有扶助,更多內容請關注應屆畢業(yè)生網(wǎng)!

菲納格動態(tài)逆定律:

會出錯的,終將會出錯-在最糟糕的時刻。

防衛(wèi)性編程是什么意思

防衛(wèi)性編程,簡樸的說,就是在編程的時候有目的地預料可能的故障點。目的是在那些可能發(fā)生的問題發(fā)生前解決它們。你望見了問題,對吧?預料意料之外的事情本來就有內在的難度,當你想要預料意料之外的事情并且解決它就更是難上了好幾倍。

下面我們看幾個實際的例子。

條件語句

這是最輕易舉行防衛(wèi)性編程的地方之一,也是最輕易得志的地方。在用PHP編程的大量處境下你不會需要"else'。

假設,你在寫一個函數(shù)并且需要一個條件語句。在這里,你只需要為你特定的變量使用三個條件語句如下:

if$var==a

elseif$var==b

elseif$var==c

沒有其他可能性了,你說,并且持續(xù)碼代碼。但是,讓我們在這里停一下。我知道你知道這里沒有其他可能性了。并且我相信你。但有時候不成預料的處境會發(fā)生。我們忘掉了一些處境。我們檢查錯誤。我們最終重用了一些代碼,超出了原本的預定范圍。突然我們有了泄露錯誤或者有時候是靜默的錯誤狀態(tài),由于我們沒有使用catch。使用else代碼塊。在使用switch時要使用default。用它們來返回或者記錄錯誤,這樣你才知道發(fā)生了什么假設發(fā)生了的話。雖然會多用兩行代碼,但當一些你無法預料的事情發(fā)生時,這是值得的。

絕不相信用戶輸入

你以前有沒有聽說過這個說法?大多數(shù)程序員聽過。這有一點含混,通俗點講,理所當然。但它是真理。你絕不理應相信用戶輸入。這不是說你假設全體用戶是瘋狂的黑客,他們使用一些用心設計的命令來摧毀你的應用。沒有必要妄想。但是,你理應假設用戶不知道你的代碼,他們不知道你需要填寫什么參數(shù),或者參數(shù)理應多長。他們不知道什么文件類型或者什么大小能上傳即使應用報告了他們。無意他們會是機器或者黑客并且他們夢想在他們的輸入中運行腳本,有時候甚至是在登陸后的輸入中。你怎么知道你能相信認證或者驗證碼能在用戶輸入之前供給一個安好的堡壘?

答案:絕不。

你絕不相信用戶輸入。假設你信任的用戶輸入,那么你永遠不會有一個突破。明白了嗎?所以總是要評估你的輸入,確定要保證你在處理數(shù)據(jù)尤其是要存入數(shù)據(jù)庫或者要把它表示出來時使用了適合的技術。因此絕不相信輸入,即使來自不是用戶的輸入的地方輸入驗證永遠是你的摯友。看看SurvivetheDeepEnd:PHPSecurity并且使用validationlibrary.吧。

對你的代碼的假設

不要假設任何事情。假設前兩個主題教會我們一些事情的話,那就是我們不理應做任何假設。作為程序員,尤其是致力于一個工程太久后,我們開頭做好多假設。我們假設用戶知道一些我們知道的事情。不確定是技術細節(jié),也可以是程序的功能性細節(jié)。我們假設用戶知道文件能有多大由于。。。我們已經(jīng)知道。或者他們知道為了讓郵件腳本。。。但事實不是,他們不知道以上任何東西。這猶如更多的是前端的工作,但明顯的是你在后端依舊要處理用戶行為和用戶輸入,所以值得好好想想。

另一個大量程序員都會做的驚人的假設是我們在任何時候對于我們的函數(shù),類或者其它代碼段的明顯的功能屬性。一個具有防衛(wèi)性的程序員會留心考慮的不僅僅是用一般的文檔來描述函數(shù)是干什么的他們也將寫下他們對輸入,參數(shù),用例,或任何其他類似的`東西做出的任何假設。由于我們都是人,我們過一段時間會忘掉一些事。我們結果也很可能會面臨其他人維護,擴展或者替換我們的代碼。假設沒有別的,回想一下,編程是發(fā)生在一個彌漫技術變革的世界里。假設你的應用依舊能使用幾年,可能會升級PHP版本并且失去一些功能,或者一些你自己代碼里面具有交互的組件之間需要變更。預料這些是很困難的,所以好的解釋和文檔是分外重要的。

視野狹窄

另一件可以使我們忘卻好的評論實踐以及標準的東西是視野狹窄。大量程序員都具有視野狹窄的毛病。你知道這種感覺-你解決問題,你處于最正確狀態(tài)。你覺得與你的音樂或沒有獨立于自己的小世界中,并且你就在編碼,突然兩小時過了,你意識到你已經(jīng)寫了多數(shù)行沒有解釋的代碼。我們全體人無意都會遇到這種事情,但重要的是在某處察覺這個處境并且補上應有的解釋。

語法和命名的一致性

一致性是一個灰色地帶它更多的是關于編碼標準之類的,但它和防衛(wèi)性編程也有聯(lián)系。在PHP中,有標準模范你的代碼格式以便別人查看,或者你以后使用。但往往沒人讓你的代碼標準化。但是無論你是否按照標準編碼,你至少要保持一致性這能讓你少犯錯誤。這對于需要大量時間返回并且修復的小的語法錯誤尤其適用。假設你總是使用一致的間隔,格式和語法,命名規(guī)格等等你就能更好的制止犯錯以至于誤讀你自己的代碼。你更可能快速欣賞代碼并且找到你需要的東西。

總結

總的來說,除去用戶行為和動作,不要對你的程序做任何假設。假設是具有防衛(wèi)性編程習慣的程序員最大的敵人。不要假設你不需要default語句或者else代碼塊。盡量使用正確的用戶錯誤信息,警告,日志或者任何其它你假設不會用到的代碼。你的假設通常是正確的但我們不在乎。我們在乎的是它們出錯的時候。確定要籌劃得

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論