调用函数时,有没有办法简化参数列表?而不是使用$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
}
您可以传入具有指定键的数组,并将其与默认值数组合并
所以而不是
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));
是的,改为传递数组,或重构。一长串参数通常很臭。
function information(array $params) {....
information(array('search'=>'.....
对于一个函数来说,十二个参数通常太多了。通过重构看起来可能是怪物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
查看所有这些实际操作。
你可以让它使函数自动用给定的值填充变量,如空字符串:
function information ($subscribe, $search="", $id="", $blank="", $category="", $recent="", $comment="", $pages="", $pending="", $profile="", $deleted="", $reported="") {
//code
}
是的,有几种方法:
- 接受关联数组作为单个参数,并将所需的内容传递给该数组。如果缺少关键参数,则引发异常。 将关键参数放在
- 函数定义的开头,将可选参数放在末尾。为它们指定一个默认值,以便您不必声明它们。
- 12 个参数对于一个函数来说太多了。考虑使用类/对象,或在不同的函数之间划分工作。
几种方式:
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