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、ロジックを実行するより良い方法は、foreachand を使用することcall_user_func_array()です:

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