我有这个:
function foo($a='apple', $b='brown', $c='Capulet') {
// do something
}
这样的事情是可能的:
foo('aardvark', <use the default, please>, 'Montague');
答案 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)
答案 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
请注意,命名参数要求传递所有非可选参数。这些可以按位置传递(就像我在这里所做的那样,上面没有名称)或以任何顺序传递名称。