动态类方法按数组值调用链接

时间:2012-11-26 19:30:52

标签: php

例如,我有课程 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
}

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

1 个答案:

答案 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,更好的逻辑方法是foreachcall_user_func_array()

foreach ($array as $method => $args) {
    call_user_func_array(array($my_class, $method), $args);
}