可以请人帮我这个和平的代码,我完全迷路了。我正在使用外国程序,我需要运行函数MainFunc()一次无限制的参数量。有两种参数类型:"输入"answers"输出",因此"输入"是一个有两个参数的函数。函数"input"answers"output"在其他地方实现,我不感兴趣。
$var->MainFunc()
->input(1,2)
->output(3)
->input(4,5)
->output(6)
->input(7,8)
->output(9)
我可以硬编码定义的参数,但我想从其他来源(数据库)获取它们,并且可以有许多组(每个组内的输入和输出)。
可以有人,请,解释一下这个PHP语法结构是如何工作的,以及我如何将它转换为传递无限的参数量?
MainFunc
, input
和output
只是返回一个对象的实例。您可以很容易地只调用一次,将返回值存储在一个变量中,并在下一行进行下一次调用。
例如,这是完全相同的:
$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
数组你可以创建从数据库中获取数据。