【问题标题】:PHP How assign value to some default function argumentsPHP如何为一些默认函数参数赋值
【发布时间】:2017-02-07 22:12:20
【问题描述】:

在下面的函数中,我们有一些具有默认值的参数,我如何调用该函数并为其分配值。

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'){ }

所以参数是在一些默认参数之后,我不想只为一个参数设置先前参数的默认值

【问题讨论】:

标签: php arguments default-arguments


【解决方案1】:

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

如果您想这样做,您必须将参数更改为单个数组,并在函数体中根据键提取您需要的内容。

除此之外,你不能在不传入 b 的情况下传递变量 c 的值。

【讨论】:

    【解决方案2】:

    除了指定 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');
    

    【讨论】:

      猜你喜欢
      • 2012-05-22
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多