2013-05-14 48 views
0

背景披露: 我一直在努力研究PHP項目一段時間,但直到最近纔開始認真查找最佳實踐,oop設計模式,新的php版本功能等等。我應該總是在PHP中檢查函數的參數嗎?

很多我的代碼最終看起來像這樣:

public function($arg1 = 'default', $arg2 = false) 
{ 
    if(!empty($arg2) && $arg1 != 'default) { 
    // do something here 
    } 
} 

幾乎所有我在github上和諸如此類的東西看到正確的OOP代碼從不檢查所使用的參數的存在或正確的類型。

我的問題是:是否認爲總是對參數進行冗餘檢查或僅在特殊情況下可能發生某些錯誤(tm)時纔是一種很好的做法。

例如,運行SQL查詢並在獲取結果後,我總是做 if(!empty($results)) //go do stuff

我應該這樣做呢?我是偏執狂嗎?

+1

我認爲這是一種不好的做法,總是做任何事情 – 2013-05-14 20:26:15

+0

我總是檢查,但離最佳實踐還很遙遠; p,它沒有受傷,並且會使得處理錯誤變得更容易 –

+1

更好的做法的開始將是_not_給予默認情況下,如果你不想這些默認值,那麼當人們使用錯誤的代碼時,會出現一個很好的E_NOTICE錯誤,甚至可以記錄這些錯誤,以確定事後發生錯誤的位置。不要爲我隱瞞這些錯誤...驗證論證的內容取決於個案的基礎,這通常與潛在的破壞性或破壞性會產生錯誤的價值有關。沒有SQL查詢的結果不是錯誤,而是我書中的有效結果。 – Wrikken

回答

1

這是很好的做法先定義函數應該做什麼並做適當的異常處理。

示例 - 如果我正在編寫一個應用程序,該應用程序使用我的一個庫,那麼應用程序應該執行一些檢查或庫應該。

我通常選擇在應用程序中進行適當的檢查,以便我可以正確地通知用戶。這也減輕了在圖書館做這件事的負擔,並使其更加靈活。但如果你選擇這樣做,你應該確保以類似的方式編寫所有的庫和應用程序(因此是「標準」),否則它會變得混亂。

我認爲github上的大部分內容都將採用庫方法,因此希望您在應用程序中執行一些操作。

+1

我認爲提及適當的異常處理很重要。其全部關於您的應用如何應對這些潛在的失敗。 – ficuscr

+0

換句話說,保持if,並添加一個其他拋出新的異常? – Carvefx

+1

@Carvefx有一點細微差別。讓事情「起泡」的概念。我會閱讀一些教程,或者查看github上其他項目的源代碼。編寫測試可能是另一種解決這個問題的好方法。基本上以各種方式嘗試和打破事情,應用程序是否以你想要的方式做出反應? – ficuscr

2

帶班,你可以檢查ARGS很容易通過typehint

public function doSomething(My\Super\Cl $cl, array $params){ 
... 
} 

有時你可以通過func_num_args

我同意檢查參數表是很好的做法,我的意思是,它被稱爲Design by contract

相關問題