例如,我有课程 MyClass :
Class MyClass {
public function method_1() {
return $this;
}
public function method_2() {
return $this;
}
public function method_n() {
return $this;
}
}
我有一系列函数及其参数:
$array = array(
'method_1' => array(
'0' => 'first_argument',
'1' => 'second_argument',
'2' => 'nth_argument',
),
'method_2' => array(
'0' => 'first_argument',
'1' => 'second_argument',
'2' => 'nth_argument',
),
);
如何从链中的数组中调用MyClass
方法?
$result = $my_class->$array['method_1']($array['method_1'][0], $array['method_1'][0])
->$array['method_1']($array['method_2'][0], $array['method_2'][0])
->$array['method_n']($array['method_n'][0], $array['method_n'][0]);
例如:
foreach($array as $function => $args) {
// build chain here and execute after foreach
}
那么,主要的问题是如何在链中调用带有参数的无限和未知数量的类函数?谢谢!
答案 0 :(得分:4)
将$array['method_*']
放入{}
括号:
$result = $my_class->{$array['method_1']}($array['method_1'][0], $array['method_1'][0])
->{$array['method_1']}($array['method_2'][0], $array['method_2'][0])
->{$array['method_n']}($array['method_n'][0], $array['method_n'][0]);
如果我注意到,虽然PHP允许这样做,但为了代码的可读性和可靠性,你应该重新考虑动态链调用。它可能会节省你几行,但可能会在以后的调试中引起一些麻烦
//附录:
IMO,更好的逻辑方法是foreach
和call_user_func_array()
:
foreach ($array as $method => $args) {
call_user_func_array(array($my_class, $method), $args);
}