2012-11-11 24 views
2

我有PHP中函數的方法參數格式(可以是任何語言)的困境。以下是兩位候選人

候選人1:哪個是方法參數的首選實踐?


function foo($param1,$param2,$param3,....$paramN) 



候選人2:


function foo ($arr) { 
    $param1 = $arr['param1']; 
    $param2 = $arr['param2']; 
    $param3 = $arr['param1']; 
    ... 
    ... 
    ... 
    $paramN = $arr['paramN']; 
} 

我傾向於候選人2的時刻,因爲我有幾個有許多參數的方法。但是,我也擔心,如果我走在候選人2的路上,那麼我的代碼有可能變得難以閱讀並且不易維護。雖然候選人2也非常誘人,因爲現在參數的順序變得無關緊要(因此方法簽名),但我擔心調試會成爲一個痛苦的屁股。

那麼推薦的方式是哪種?選擇哪個候選人,爲什麼?

+0

'$ obj ['param']'會拋出一個錯誤。我認爲你的意思是'$ obj-> param' –

+0

如果我將它作爲一個數組傳遞,那麼這將起作用。 –

+0

當然,但這不是你在你的代碼示例中。 :)只是想給你一個頭,如果你錯了。 –

回答

3

許多參數永遠不好處理,我會親自選擇候選人2,因爲它更具可擴展性。您可以使用驗證邏輯來​​補償「混亂」,確保所有必需的參數設置正確。

- 在我看來 - 最好的方法是重構你的代碼,並將其拆分成幾個可能可鏈接的部分,這樣複雜度就降低了。

什麼也許是一個不錯的選擇是使用Value Objects(或有時也數據傳輸對象),以通過一種「容器」的所有參數。通過這種方式,可以確保只有有效的數據可以傳遞,因爲值對象本身就關心其內容。

+1

+1,並且因爲價值對象建議而被接受並拆分方法建議。 –

相關問題