2011-02-05 47 views
1

將數據傳遞給函數(變量或數組(對象))的最佳實踐是什麼?什麼是最好的傳遞函數 - 變量或數組/對象?

例如,我需要大多數函數的用戶信息。我應該通過完整的用戶對象的所有信息,或者僅僅只有我需要什麼(總用戶名,有時ID,很少其他用戶信息)

function do_something($data, $user) // $user is object 

function do_something($data, $user_name, $user_id) // only variables 

什麼是最好的做法此案件?

+0

過寬/一般有一個最佳實踐。有很多情況下,其中一個或另一個是更好的決定。 – 2011-02-05 06:21:44

回答

3

作爲一個開發者,當你開始編碼,你有一定數量的事物的功能需要,以便它的工作,有的可能是可選的,所以你着手創建類似的方法簽名到下面的一個。

function do_something($var1, $var2, $var3, $var4 = false, $var5 = '') { 

//process business logic here 

} 

現在,假設您實現並獲得關於功能和其他改進的更多反饋。如果建議的功能或改進要求您更改方法簽名以合併新變量並使用默認值,那麼您處於一個位置。

那麼避免這種情況的最佳方法是什麼?在我看來,如果你使用一個接受變量的函數,它可以很容易地通過接受更多的參數來擴展,而不用接受一個數組作爲單個參數來破壞任何東西。數組必須在代碼內部或通過用戶外部構建。

所以你可以重寫如低於上述邏輯:

function do_something($args = array()) { 

$myvar = (array_key_exists('mykey', $args)) ? $args['mykey'] : get_default_value('mykey'); 

//process business logic here 

} 
2

對於全部的情況沒有更好的做法。根據您的功能的用途使用任意一種:

  • 如果函數不關心對象,則可以傳遞各個對象屬性的值。

  • 如果函數要以某種方式操作對象,可以通過直接修改其屬性或調用其方法來傳遞對象。

相關問題