4

例如我有类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
}

那么,主要问题是如何使用链中的参数调用无限数量和未知数量的类函数?谢谢!

4

1 回答 1

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,执行逻辑的更好方法是通过foreachcall_user_func_array()

foreach ($array as $method => $args) {
    call_user_func_array(array($my_class, $method), $args);
}
于 2012-11-26T19:38:13.410 回答