1

いくつかのデフォルトの引数といくつかの受け渡しを使用したい関数を呼び出す方法:

function genericlist (array $arr, string $name, [string $attribs = null], 
           [string $key = 'value'], [string $text = 'text'], 
           [mixed $selected = NULL], [ $idtag = false], [ $translate = false])

$ arr、$ name、$ selectedのみを渡し、他のすべてにデフォルト値を使用したいのですが、どうすればよいですか?デフォルト値を渡して順番に実行できることはわかっていますが、別の方法が必要です。ありがとうございました。

4

3 に答える 3

1

array_merge配列ルートの使用に興味がある場合は、解決策を提供できる可能性があります。

function func1($args = array())
{
   $defaults = array('X' => 10, 'Y' => 30);
   $args = array_merge($defaults, $args);
   // $args now has default arguments and user supplied arguments

   return $args;
}

func1(); // array('X' => 10, 'Y' => 30)
func1(array('X' => 40)); // array('X' => 40, 'Y' => 30)
于 2011-04-22T16:17:47.347 に答える
0

確かに、デフォルト値を渡すか、他のすべてのオプションの引数の前に$selectedを配置するように引数を並べ替えるかのどちらかです。

また、PHP開発フォーラムで名前付きパラメーターをリクエストできます。

于 2011-04-22T16:16:58.110 に答える
0

私は2つの解決策を見ます:

  1. null引数を使用して関数を作成します。null値が指定された場合は、関数内でnull値を確認し、デフォルトに置き換えます。これは、プロトタイプで指定されなくなったという点で回りくどいものですが、最小限の労力でデフォルト値のソリューションを提供します。
  2. プロトタイプをキーと値のペアを持つ配列引数に変換します。これは最初の解決策と似ていますがarray_merge、「デフォルト値」配列と新しく渡された引数値を組み合わせるなどの方法を使用できます。

例1:

function abc($foo = null, $bar = null)
{
  // defaulting parameters
  if (is_null($foo)) $foo = 'Hello, world!'; // foo default value
  if (is_null($bar)) $bar = 123.45; // bar default value

  // on-ward with the function
}

// override bar, but not foo:
abc(null, 987.65);

例2:

function def($args)
{
  // defaulting parameters
  $args = array_merge(
    array(
      'foo' => 'Hello, world!', // Default foo value
      'bar' => 123.45           // default bar value
    ),
    $args // override with supplied values
  );

  // on-ward with the function
}

// override bar, but not foo
def(array('bar'=>987.65));
于 2011-04-22T16:19:03.323 に答える