我想知道使用上述函数调用类方法以使用数组动态填充方法调用时的最佳实践是什么!
我有什么优点和缺点?我的意思是,在某些情况下,RefelectionMethod + invokeArgs 选项似乎比 call_user_funcion 快 40%……但我错过了什么吗?
谢谢。
根据要求,我将在我需要通过裁判的情况下添加一个小基准......我知道这是一个非常具体的案例,这与上述问题没有严格的关系!
class foo { public function bar(&$a, &$b, &$c) { /* */ } }
$t1 = microtime(true);
$arr = array(1,2,3);
$foo = new foo;
$rfl = new ReflectionMethod('foo', 'bar');
for ($i=0; $i < 10000; ++$i)
{
$rfl->invokeArgs($foo, $arr);
}
$t2 = microtime(true);
echo sprintf("\nElapsed reflectionmethod : %f", $t2 - $t1);
$t1 = microtime(true);
$arr = array(1,2,3);
$foo = new foo;
for ($i=0; $i < 10000; ++$i)
{
foreach( $arr as $k => $v ) $ref[$k] = &$arr[$k];
call_user_func_array( array($foo, 'bar'), $arr);
}
$t2 = microtime(true);
echo sprintf("\nElapsed calluserfuncarray : %f", $t2 - $t1);
结果
Elapsed reflectionmethod : 0.025099
Elapsed calluserfuncarray : 0.051189
我真的很想知道什么时候使用一个比另一个更好,为什么!虽然它与速度没有严格的关系!