我正在做一些事情,我需要能够将一个索引的 args 数组传递给一个方法,就像call_user_func_array
工作原理一样。我会使用call_user_func_array
,但它不是 OOP 方法,这是不受欢迎的,它要求方法是静态的,这会破坏目标类的 OO。
我曾尝试使用ReflectionClass
但无济于事。您不能调用类方法的参数,只能调用构造函数。不幸的是,这是不可取的。
因此,我查看了手册页并查看了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()
,我将只有一个参数,即一个数组。相反,我需要能够提取单个参数。
我在想,如果有一种方法可以召唤我ReflectorFunction
,ReflectorClass
我会以船形和我的方式进入,但看起来这是不可能的。
有没有人有他们以前用来完成此任务的任何东西?