當我創建一個具有可選參數的函數時,我必須考慮哪一個函數最可能被傳遞,並且決定了函數在函數中指定它們的順序宣言。使用數組傳遞可選函數參數的更簡單的方法
採取以下功能與不那麼好放在$ mandatoryParam:
public function myFunc($mightBeEmptyA, $mightBeEmptyB, $mandatoryParam)
{
}
它是更好的做法,這將是更好地做到以下幾點?:
使用數組來改爲傳入參數。處理陣列中的參數是否需要額外的邏輯?
當我創建一個具有可選參數的函數時,我必須考慮哪一個函數最可能被傳遞,並且決定了函數在函數中指定它們的順序宣言。使用數組傳遞可選函數參數的更簡單的方法
採取以下功能與不那麼好放在$ mandatoryParam:
public function myFunc($mightBeEmptyA, $mightBeEmptyB, $mandatoryParam)
{
}
它是更好的做法,這將是更好地做到以下幾點?:
使用數組來改爲傳入參數。處理陣列中的參數是否需要額外的邏輯?
是的,如果你的函數需要很多參數。例如一個過濾某些數據的函數,並且您有很多過濾器。
我通常不喜歡這樣:
public function myFunc(array $args){
$args += array(
'mightBeEmptyA' => 'defaultVal',
// ...
);
extract($args, EXTR_SKIP);
// and here I can use $mightBeEmptyA
}
你應該看看func_get_args這種方式在技術上不要緊,你傳遞給函數你可以在函數內部進行排序。如果你不想要,你根本不需要傳遞任何東西。
public function myFunc()
{
if (func_num_args()) {
// has arguments
$arg_list = func_get_args();
...
} else {
// no arguments
}
}
您可以使用默認參數
public function myFunc($mandatoryParam,$mightBeEmptyA="", $mightBeEmptyB="")
{
}
但是,如果存在這樣的情況不應該提供您mightBeEmptyA的情況,但mightBeEmptyB必須provided.Then你有這樣稱呼它下面
myFunc("mandatory","","OptionalB");
因此,根據您的情況來打電話。
也許吧。這取決於。如果您傳遞的參數過多,則應首先研究是否可以簡化函數/參數。 – deceze 2013-02-25 13:36:43