调用函数时有没有办法简化参数列表?而不是使用$blank
。
$subscribe=1;
$database->information($blank,$blank,$blank,$blank,$blank,$blank,$subscribe,$blank,$blank,$blank,$blank,$blank);
function information ($search,$id,$blank,$category,$recent,$comment,$subscribe,$pages,$pending,$profile,$deleted,$reported) {
//code
}
答案 0 :(得分:2)
是的,改为传递数组,或重构。长参数列表通常是难闻的气味。
function information(array $params) {....
information(array('search'=>'.....
答案 1 :(得分:2)
对于一个函数,十二个参数通常太多。通过重构可能是怪物的function information
,可能会简化您的代码(包括缩短参数列表)。
您可以在此期间使用的权宜之计措施
以上两种情况都要求您访问所有调用网站以供审核和修改。
添加默认参数是恕我直言,这是一个糟糕的选择,因为通过查看示例调用,似乎你需要使所有参数默认,这反过来意味着编译器永远不会警告你如果你错误地调用了这个函数。
转换为数组更有效,但它会强制您以不会出现意外错误的方式重写调用。函数签名将更改为
function information(array $params)
或可能
function information(array $params = array())
如果您希望所有参数都是可选的。您可以使用
为参数提供默认值function information(array $params) {
$defaults = array('foo' => 'bar', /* ... */);
$params += $defaults; // adds missing values that have defaults to $params;
// does not overwrite existing values
为了避免重写函数体,您可以使用export
将这些值从数组中提取到本地范围:
export($params); // creates local vars
echo $foo; // will print "bar" unless you have given another value
<强> See all of this in action 强>
答案 2 :(得分:2)
您可以传入具有指定键的数组,并将其与默认值数组合并
所以而不是
function foo($arg1 = 3, $arg2 = 5, $arg3 = 7) { }
你有
function foo($args) {
$defaults = array(
'arg1' => '',
'arg2' => null,
'arg3' => 7
);
// merge passed in array with defaults
$args = array_merge($defaults, $args);
// set variables within local scope
foreach($args as $key => $arg) {
// this is to make sure that only intended arguments are passed
if(isset($defaults[$key])) ${$key} = $arg;
}
// rest of your code
}
然后将其称为
foo(array('arg3' => 2));
答案 3 :(得分:0)
你可以这样做,所以函数会自动用给定的值填充变量,如空字符串:
function information ($subscribe, $search="", $id="", $blank="", $category="", $recent="", $comment="", $pages="", $pending="", $profile="", $deleted="", $reported="") {
//code
}
答案 4 :(得分:0)
是的,有几种方法:
答案 5 :(得分:0)
有几种方法:
function test($input = "some default value") {
return $input; // returns "some default value"
}
function test($input) {
return $input;
}
test(NULL); // returns NULL
function test() {
foreach(func_get_args() as $arg) {
echo $arg;
}
}
test("one", "two", "three"); // echos: onetwothree