call_user_func_array的替代方案

时间:2013-02-24 22:43:48

标签: php performance optimization

我必须在PHP脚本中使用call_user_func_array()。虽然看起来非常缓慢。那里有其他选择吗?

1 个答案:

答案 0 :(得分:3)

使用call_user_func_array与直接调用函数时性能存在差异,但它并不大(大约慢15倍)。除非你使用它数千次,否则你不会注意到它。

要回答您的问题,您可以自己构建一个:

function call($fn, array $args = array()){

  $numArgs = count($args);

  if($numArgs < 1)
    return $fn();

  if($numArgs === 1)  
    return $fn($args[0]);

  if($numArgs === 2)  
    return $fn($args[0], $args[1]);

  // ...

  return call_user_func_array($fn, $args);
}

还有ReflectionFunction::invokeArgs(和ReflectionMethod::invokeArgs):

$reflector = new ReflectionFunction($fn);
return $reflector->invokeArgs($args);

另一个解决方案(可能是最好的解决方案)是让你的函数接受带参数的数组......