2016-09-29 35 views
1

次の関数では、デフォルト値を持つ引数がいくつかありますが、その関数に値を代入して呼び出す方法はありますか?PHPデフォルトの関数引数に値を代入する方法

function foo($a, $b='def b', $c='def c', $d='def d'){ 
    //.... 
} 
//call foo for $a='nu a' and $c='nu c' 
foo('nu a', $c='nu c'); //but b will be assigned 

私は$cの値を設定したいとちょうど$cのためにそれらのすべてを割り当てたくありません。

  1. ない受け入れ可能な解決策:

    foo('nu a', 'def b', 'nu c');

  2. ない許容される溶液

    //moving c to second argument function foo($a, $c='def c', $b='def b', $d='def d'){ }

ので、引数はいくつかのデフォルト引数の後で、私はしたくありません前のデフォルト値を設定する1つだけの議論

+0

可能なすべてのデフォルトを関数引数の右側に移動することは可能ですか? – atoms

+3

[オプションのパラメータを持つPHP関数]の重複可能性(http://stackoverflow.com/questions/3978929/php-function-with-optional-parameters) –

答えて

0

できません。あなたはPHPでサポートされていない名前付きパラメータを探しています。

これを行うには、パラメータを1つの配列に変更する必要があります。関数本体では、キーに基づいて必要なものを抽出します。

それ以外の場合は、bを渡さずに変数cの値を渡すことはできません。

0

false,''またはnullのようなデフォルトを指定する以外の引数をスキップする方法はありません。

あなたはこのようなものを使用します。

function foo($settings) { 
    $a = $settings['a']; 
    $b = $settings['b']; 
    $c = $settings['c']; 
    $d = $settings['d']; 
    # code... 
} 

foo($settings = array(
    'a' => null, 
    'b' => 'def b', 
    'c' => 'def c', 
    'd' => 'def d', 
)); 

または、インデックス付きの配列で、あなたはこのように、配列の値を処理するためにlist()構文を使用することができます:で

function foo($settings) { 
    list($a, $b, $c, $d) = $settings; 
    # code... 
} 

foo(array(null, 'def b', 'def c', 'def d')); 

少なくともほとんどの場合、関数定義の引数リストの終わりに移動することはできません。

function foo($a, $b = 'def b', $c = 'def c', $d = 'def b') { 
    # code... 
} 
foo($a = 'def a'); 
関連する問題