2016-09-29 72 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'){ }

所以说法是经过一些默认参数,我不希望为此设置默认值只有一个人的理由

+0

是否可以将所有可能的默认值移动到函数参数的右侧? – atoms

+3

[可选参数的PHP函数]的可能重复(http://stackoverflow.com/questions/3978929/php-function-with-optional-parameters) –

回答

0

不可能。您正在寻找不受php支持的命名参数。

如果你想要做到这一点,你必须改变你的参数到一个单一的数组,并在函数体中根据键提取你需要的东西。

除此之外,不能传递变量c的值而不传入b。

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');