函数简化参数列表


function simplify argument list

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