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 に答える