2

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

4

1 回答 1

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);

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

于 2013-02-24T23:17:02.800 回答