どのように機能するかのように、引数のインデックス付き配列をメソッドに渡すことができるようにする必要がある何かに取り組んでいますcall_user_func_array。私は使用しますcall_user_func_arrayが、それは望ましくないOOPアプローチではなく、メソッドを静的にする必要があり、ターゲットクラスのOOを壊します。
私は使用しようとしましReflectionClassたが、役に立ちませんでした。クラスのメソッドに引数を呼び出すことはできません。コンストラクターのみです。残念ながら、これは望ましくありません。
だから私はmanページを見て見ましReflectionFunctionたが、クラスをインスタンス化し、それをメソッドにポイントしてからそれを使用する方法はありませんinvokeArgs.
使用例ReflectionFunction(覚えておいてください、この質問はPHP 5.4とタグ付けされているため、構文です):
$call = new \ReflectionFunction( "(ExampleClass())->exampleMethod" );
$call->invokeArgs( ["argument1", "argument2"] );
これは次の場合に失敗します。
Function (Index())->Index() does not exist
使用例ReflectionMethod
$call = new \ReflectionMethod( "ExampleClass", "exampleMethod" );
$call->invokeArgs( new ExampleClass(), ["argument1", "argument2"] );
print_r( $call );
これは次の場合に失敗します。
ReflectionMethod Object
(
[name] => Index
[class] => Index
)
引数がメソッドに渡されることはありません。
望ましい結果は次のとおりです。
class ExampleClass() {
public function exampleMethod( $exampleArg1, $exampleArg2 ){
// do something here
echo "Argument 1: {$exampleArg1}\n";
echo "Argument 2: {$exampleArg2}\n";
}
}
$array = [ 'exampleArg1Value', 'exampleArg2Value' ];
$arrayのインスタンスに渡した場合ExampleClass->exampleMethod()、引数は 1 つだけで、配列になります。代わりに、個々の引数を取得できる必要があります。
呼び寄せる方法があれば、船の形で途中でやろうかなと思っていたReflectorFunctionのReflectorClassですが、無理そうです。
以前にこれを達成するために使用したものはありますか?