PHP复杂函数参数传递


PHP complex function parameter passing

可以请人帮我这个和平的代码,我完全迷路了。我正在使用外国程序,我需要运行函数MainFunc()一次无限制的参数量。有两种参数类型:"输入"answers"输出",因此"输入"是一个有两个参数的函数。函数"input"answers"output"在其他地方实现,我不感兴趣。

$var->MainFunc()
        ->input(1,2)
        ->output(3)
        ->input(4,5)
        ->output(6)
        ->input(7,8)
        ->output(9)

我可以硬编码定义的参数,但我想从其他来源(数据库)获取它们,并且可以有许多组(每个组内的输入和输出)。

可以有人,请,解释一下这个PHP语法结构是如何工作的,以及我如何将它转换为传递无限的参数量?

MainFunc, inputoutput只是返回一个对象的实例。您可以很容易地只调用一次,将返回值存储在一个变量中,并在下一行进行下一次调用。

例如,这是完全相同的:

$tmp = $var->MainFunc();
$tmp = $tmp->input(1,2);
$tmp = $tmp->output(3);
$tmp = $tmp->input(4,5);
$tmp = $tmp->output(6);
$tmp = $tmp->input(7,8);
$tmp = $tmp->output(9);

这意味着您可以轻松地将其放入循环中,并在每次迭代时调用input/output。

这样做也会产生相同的结果:

//array of calls. Could be pulled/generated from db
$args = array(
    array(1,2),
    array(3),
    array(4,5),
    array(6),
    array(7,8),
    array(9)
);
//counter for even/odd (input/output)
$cnt = 0;
//the first call
$tmp = $var->MainFunc();
//loop over the arguments array
foreach($args as $argList){
    $call = array($tmp);
    //change method based on number of arguments
    if($cnt % 2 == 0){
        //even, call input
        $call[] = 'input';
    } else {
        //odd, call output
        $call[] = 'output';
    }
    //call the method
    $tmp = call_user_func_array($call, $argList);
    //increment counter
    $cnt++;
}

编辑:忘记增加计数器

所有函数返回可能 $this,因此您可以使用方法链接来运行此代码。

这段代码的工作原理与

    $var->MainFunc();
    $var->input(1,2);
    $var->output(3);
    $var->input(4,5);
    $var->output(6);
    $var->input(7,8);
    $var->output(9);

如您所见,这与使用无限制的参数数量无关。每次输入法有2个参数,输出法1.

我理解你的问题,你可以这样做;

$input = array(array(1,2), array(2,3), array(5,6));
$output = array(1,6,7);
$var->MainFunc();
for ($i=0, $c = count($input); $i<$c; ++$i) {
  $var->input($input[$i][0], $input[$i][1]);
  $var->output($output[$i]);
}

当然那些$input$output数组你可以创建从数据库中获取数据。