是否可以跳过php(5)函数调用中具有默认值的参数?

时间:2009-02-23 21:00:24

标签: php

我有这个:

function foo($a='apple', $b='brown', $c='Capulet') {
    // do something
}

这样的事情是可能的:

foo('aardvark', <use the default, please>, 'Montague');

6 个答案:

答案 0 :(得分:12)

如果这是你的功能,你可以使用null作为通配符,稍后在函数内设置默认值:

function foo($a=null, $b=null, $c=null) {
    if (is_null($a)) {
        $a = 'apple';
    }
    if (is_null($b)) {
        $b = 'brown';
    }
    if (is_null($c)) {
        $c = 'Capulet';
    }
    echo "$a, $b, $c";
}

然后您可以使用null

跳过它们
foo('aardvark', null, 'Montague');
// output: "aarkvark, brown, Montague"

答案 1 :(得分:5)

如果它是你自己的函数而不是PHP的核心,你可以这样做:

function foo($arguments = []) {
  $defaults = [
    'an_argument' => 'a value',
    'another_argument' => 'another value',
    'third_argument' => 'yet another value!',
  ];

  $arguments = array_merge($defaults, $arguments);

  // now, do stuff!
}

foo(['another_argument' => 'not the default value!']);

答案 2 :(得分:4)

找到了这个,这可能仍然是正确的:

http://www.webmasterworld.com/php/3758313.htm

简答:不。

答案很长:是的,以上面列出的各种方式。

答案 3 :(得分:0)

你几乎找到了答案,但是学术/高级方法是function currying我真的从来没有找到过很多用途,但知道存在是有用的。

答案 4 :(得分:0)

你可以使用一些怪癖,要么将所有参数作为像ceejayoz建议的数组传递,要么使用一些过于复杂的代码来解析func_get_args()并与默认列表合并。不要复制粘贴它,你必须使用对象和特征。最后,为了能够传递所有类型的值(通过使它们成为默认参数替换的信号而不排除null或false),您必须声明一个虚拟特殊类型DefaultParam。 另一个减号是,如果要在任何IDE中获取类型提示或帮助,则必须复制函数声明中的名称和默认值。

var beaches = [
   ['Bondi Beach', -33.890542, 151.274856, 4],
   ['Coogee Beach', -33.923036, 151.259052, 5],
   ['Cronulla Beach', -34.028249, 151.157507, 3],
   ['Manly Beach', -33.80010128657071, 151.28747820854187, 2],
   ['Maroubra Beach', -33.950198, 151.259302, 1]
];

注意:通过使用preserve_index = true,您可以获得从其原始索引开始的额外参数。

答案 5 :(得分:0)

从 PHP 8 开始,使用 named parameters

function foo($a='apple', $b='brown', $c='Capulet') {
  // do something
}
foo('apple', c:'Montague');

这让您可以绕过任意数量的参数,允许它们采用默认值。这对于像 setcookie:

这样冗长的函数很有帮助
setcookie('macadamia', httponly:true); // skips over 5 parameters

请注意,命名参数要求传递所有非可选参数。这些可以按位置传递(就像我在这里所做的那样,上面没有名称)或以任何顺序传递名称。