如何将参数传递给函数而不重复这么多次?

时间:2012-01-15 23:23:57

标签: php

我试图避免这种情况:

function do_something($arg1, $arg2, $arg3, $arg4, $arg5) {

   function do_something_else($arg1, $arg2, $arg3, $arg4, $arg5) {
      // code    
   }

   do_something_else($arg1, $arg2, $arg3, $arg4, $arg5);

   // do other things with the args

}

也就是说,反复重复args,特别是在有很多args的情况下。在这个例子中,我需要在主do_something函数中有一个名为do_something_else的嵌套函数。嵌套函数还使用传递给它父级的所有相同的args。所以我必须将它们传递给它,并在实际执行do_something函数时再次重复所有这些参数。

有更清洁的方法来处理这个问题吗?我知道内置的php函数func_get_args()返回一个函数内部所有参数的数组,但是如何将这些参数传递给子函数,以便它们在那里也可用,基本上寻找一种方法来做到这一点而不重复args这么多次?

7 个答案:

答案 0 :(得分:3)

将您的参数放在一个对象中。

答案 1 :(得分:2)

你已经说过了。为简单起见,您可以使用func_get_args()。将其与call_user_func_array()结合使用即可:

call_user_func_array("do_something_else", func_get_args());

实际上有一个小警告。这只适用于PHP 5.3及更高版本。在此之前,您需要一个临时变量:

$args = func_get_args();
call_user_func_array("do_something_else", $args);

所以,它真的不简洁。但它已经显示了替代方案:只需优化函数签名以使用数组中的参数。

答案 2 :(得分:1)

function do_something($arg1, $arg2, $arg3, $arg4, $arg5) {

  function do_something_else($arg1, $arg2, $arg3, $arg4, $arg5) {
    echo $arg5;
  }

  call_user_func_array('do_something_else', func_get_args());
}

这样只会省去一次重复,即调用do_something_else函数。

答案 3 :(得分:1)

您可以使用数据传输对象(DTO)。 DTO是一种数据结构(结构或类),用于在层或函数之间传输数据。

答案 4 :(得分:0)

对于嵌套函数,您还可以使用“use”关键字让闭包使用周围上下文中的变量。我经常这样做:

$function = function($var) use ($context1, $context2) {
    // code
}
$function($input1);
$function($input2);

确实需要PHP 5.3或更高版本。

答案 5 :(得分:0)

您可以随时传递关联的数组。允许灵活性。

function sample($data = array()) {
   print_r($data);
}

sample(array('id'=>123.'category'=>'tv'));

答案 6 :(得分:-1)

您基本上可以通过提及func_get_args()给出答案。

function do_something($arg1, $arg2, $arg3, $arg4, $arg5) {

   function do_something_else($args) {
      // code    
   }

   do_something_else(func_get_args());

   // do other things with the args

}