0

當我創建一個具有可選參數的函數時,我必須考慮哪一個函數最可能被傳遞,並且決定了函數在函數中指定它們的順序宣言。使用數組傳遞可選函數參數的更簡單的方法

採取以下功能與不那麼好放在$ mandatoryParam:

public function myFunc($mightBeEmptyA, $mightBeEmptyB, $mandatoryParam) 
{ 

} 

它是更好的做法,這將是更好地做到以下幾點?:

使用數組來改爲傳入參數。處理陣列中的參數是否需要額外的邏輯?

+1

也許吧。這取決於。如果您傳遞的參數過多,則應首先研究是否可以簡化函數/參數。 – deceze 2013-02-25 13:36:43

回答

0

是的,如果你的函數需要很多參數。例如一個過濾某些數據的函數,並且您有很多過濾器。

我通常不喜歡這樣:

public function myFunc(array $args){ 

    $args += array(
    'mightBeEmptyA' => 'defaultVal', 
    // ... 
); 

    extract($args, EXTR_SKIP); 

    // and here I can use $mightBeEmptyA 
} 
0

你應該看看func_get_args這種方式在技術上不要緊,你傳遞給函數你可以在函數內部進行排序。如果你不想要,你根本不需要傳遞任何東西。

public function myFunc() 
{ 
    if (func_num_args()) { 
     // has arguments 
     $arg_list = func_get_args(); 
     ... 
    } else { 
     // no arguments 
    } 
} 
0

您可以使用默認參數

public function myFunc($mandatoryParam,$mightBeEmptyA="", $mightBeEmptyB="") 
{ 

} 

但是,如果存在這樣的情況不應該提供您mightBeEmptyA的情況,但mightBeEmptyB必須provided.Then你有這樣稱呼它下面

myFunc("mandatory","","OptionalB"); 

因此,根據您的情況來打電話。

相關問題