如何在需要默认值时跳过参数

时间:2009-07-12 01:45:06

标签: php

如果我有这样的功能:

function abc($a,$b,$c = 'foo',$d = 'bar') { ... }

我希望$c假设它是默认值,但是需要设置$d,我将如何在PHP中进行调用?

5 个答案:

答案 0 :(得分:9)

不幸的是,PHP无法做到这一点。你可以通过检查null来解决这个问题。例如:

function abc($a, $b, $c = 'foo', $d = 'bar') {
    if ($c === null)
        $c = 'foo';
    // Do something...
}

然后你会调用这样的函数:

abc('a', 'b', null, 'd');

不,它不是很漂亮,但它能完成这项工作。如果你真的喜欢冒险,你可以传入一个关联数组而不是最后两个参数,但我认为这比你想要的更多。

答案 1 :(得分:4)

关联数组在这里并不是很糟糕,特别是当参数列表开始变大时:

function abc($args = array()) {
    $defaults = array('c' => 'foo', 'd' => 'bar');
    $args = array_merge($defaults, $args);
}

如果你想明确地要求其中一些,你可以把它们放在前面:

function abc($a, $b, $args = array()) {

}

这取决于你,我看到大项目使用两种方法(强制传递null和这个),老实说,我更喜欢这个。如果您熟悉Javascript,当您向它们传递选项时,许多脚本会使用此行为,因此它不是完全陌生的。

答案 2 :(得分:2)

PHP不支持此功能。 (non-explicit ref

答案 3 :(得分:0)

我不相信你可以在php中这样做。

答案 4 :(得分:0)

如果将所有参数放入参数对象然后解析它会怎样?

function abc(arguments) {
  foreach (index=>value in arguments) { ... }
}
abc({message: "Out of condoms.", haveSex: false, code: 404});