是否需要php函数的所有参数?我的意思是,如果我有一个像这样的5个参数的函数
function MyFunction($conditionArg, $arg1, $arg2, $arg3, $arg4) {
if($conditionArg == "something") {
// use arguments 1 and 2
}
elseif($conditionArg == "something else") {
// use arguments 3 and 4
}
}
所以我的问题是:当我调用该函数时,我只能提供像这样的所需参数
MyFunction("something", $arg1 value, $arg2 value)
答案 0 :(得分:3)
在这种情况下,您可以指定默认参数。如果在函数调用期间未指定参数,则将使用它们的默认值。
function MyFunction($conditionArg, $arg1=null, $arg2=null, $arg3=null, $arg4=null) {
if($conditionArg == "something") {
// use arguments 1 and 2
}
elseif($conditionArg == "something else") {
// use arguments 3 and 4
}
}
现在,以下所有函数调用都可以正常工作:
MyFunction("something");
MyFunction("something", $arg1);
MyFunction("something", $arg1, $arg2);
MyFunction("something", $arg1, $arg2, $arg3);
MyFunction("something", $arg1, $arg2, $arg3, $arg4);
另请参阅:Should my PHP functions accept an array of arguments or should I explicitly request arguments?
答案 1 :(得分:1)
您可以在声明功能时设置默认值:
function MyFunction($conditionArg, $arg1=false, $arg2=false, $arg3=false, $arg4=false) {
if($conditionArg == "something") {
// use arguments 1 and 2
}
elseif($conditionArg == "something else") {
// use arguments 3 and 4
}
}
在上面的示例中,现在只需要$ conditionArg,其他所有内容在函数范围内都默认为false。
它可以默认为任何东西,字符串int,null等。
在这样的示例中,另一个选项是模仿pythonic kwargs数组并将一个参数作为数组传递,仅包含所需的参数作为数组元素......
MyFunction($args = array())
{
if(isset($args['condition']))
{
if($args['condition'] === "something")
{
//make hay
}
elseif($args['condition'] === "derp")
{
//make a different kind of hay
}
}
}
进一步采取第二个例子,如果总是需要第一个项目,那么分别传递第一个并传递第二个参数:
MyFunction($conditionArg, $args = array())
{
if($condition === "something")
{
//use $args['one'], $args['two']
}
elseif($condition === "derp")
{
//use $args['three'], $args['four']
}
}