0

调用函数时有没有办法简化参数列表?而不是使用$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
    }
4

6 回答 6

2

是的,改为传递一个数组,或者重构。长长的论据列表通常是难闻的。

function information(array $params) {....

information(array('search'=>'.....
于 2012-04-11T09:57:44.650 回答
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

看到所有这一切的行动

于 2012-04-11T09:58:13.617 回答
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));
于 2012-04-11T09:59:15.643 回答
0

你可以这样做,这样函数就会自动用给定的值填充变量,比如空字符串:

function information ($subscribe, $search="", $id="", $blank="", $category="", $recent="", $comment="", $pages="", $pending="", $profile="", $deleted="", $reported="") {
    //code
}
于 2012-04-11T09:58:01.960 回答
0

是的,有几种方法:

  • 接受关联数组作为单个参数,并将您需要的内容传递给它。如果缺少关键参数,则抛出异常。
  • 将关键参数放在函数定义的开头,将可选参数放在末尾。给它们一个默认值,这样您就不必声明它们。
  • 重新考虑你的功能。12 个参数对于一个函数来说太多了。考虑使用类/对象,或在不同功能之间划分工作。
于 2012-04-11T10:00:10.700 回答
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
于 2012-04-11T10:00:49.917 回答