请有人帮我解决这段代码的安宁,我完全迷失了。我正在使用外国程序,我需要使用无限参数量运行函数MainFunc()一次。有两种参数类型:"输入"和"输出",因此"输入"是一个有两个参数的函数。功能"输入"和"输出"在其他地方实施,我不感兴趣。
$var->MainFunc()
->input(1,2)
->output(3)
->input(4,5)
->output(6)
->input(7,8)
->output(9)
我可以对已定义的参数进行硬编码,但我想从其他源(DataBase)中获取它们,并且可以有许多组(每组中的输入和输出)。
有人可以解释一下这个PHP语法构造是如何工作的,如何将其转换为传递无限制的参数量?
答案 0 :(得分:1)
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);
这意味着您可以轻松地将其置于循环中并在每次迭代时调用输入/输出。
这样的事情也会产生相同的结果:
//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++;
}
编辑:忘了增加计数器。
答案 1 :(得分:0)
所有函数都返回可能 $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
数组。我只是将样本数据提供给他们。