0

オプションのパラメーターを持つ関数を作成するときは、どれが最も渡される可能性が高く、関数宣言でそれらを指定する順序を決定するかを考える必要があります。

あまり適切に配置されていない$mandatoryParamを使用して、以下の関数を実行します。

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

}

それはより良い練習であり、次のことを行う方が良いでしょうか?:

...
$this->myFunc(array('mightBeEmptyA' => 'myValue')) ;
...

public function myFunc($params)
{
    if($params['mightBeEmptyA'])
    {
        // Do something....
    }
}

代わりに、配列を使用してパラメーターを渡します。配列内のパラメーターを処理するために追加のロジックが必要ですか?

4

3 に答える 3

0

はい、関数に多くの引数が必要な場合は可能です。たとえば、特定のデータをフィルター処理する関数で、多くのフィルターがあります。

私は通常このようにします:

public function myFunc(array $args){

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

  extract($args, EXTR_SKIP);

  // and here I can use $mightBeEmptyA
}
于 2013-02-25T13:38:09.083 に答える
0

デフォルトのパラメータを使用できます

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

}

しかし、あなたの mightBeEmptyA を提供するべきではなく、 mightBeEmptyB を提供する必要がある状況がある場合は、次のように呼び出します。

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

そのため、状況に応じて電話をかけます。

于 2013-02-25T13:42:08.747 に答える
0

このようにfunc_get_argsを見る必要があります。技術的には、関数に何を渡すかは問題ではなく、関数自体の中で並べ替えることができます。したくない場合は、何も渡す必要はありません。

public function myFunc()
{
    if (func_num_args()) {
        // has arguments
        $arg_list = func_get_args();
        ...
    } else {
        // no arguments
    }
}
于 2013-02-25T13:40:17.787 に答える