Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 调用\用户\函数\数组的替代方法_Php_Performance_Optimization - Fatal编程技术网

Php 调用\用户\函数\数组的替代方法

Php 调用\用户\函数\数组的替代方法,php,performance,optimization,Php,Performance,Optimization,我必须在PHP脚本中使用call\u user\u func\u array()。但是它看起来非常慢。还有其他选择吗?使用调用用户函数数组与直接调用函数在性能上有所不同,但没有那么大(大约慢15倍)。除非你使用它数千次,否则你不会注意到它 要回答您的问题,您可以自己构建一个: function call($fn, array $args = array()){ $numArgs = count($args); if($numArgs < 1) return $fn();

我必须在PHP脚本中使用
call\u user\u func\u 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);
}

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

显示如何使用它的上下文。参数是否需要在数组中,或者将
调用\u user\u func()
就够了?“但速度似乎非常慢”-你是如何测量的?人们不应该认为
反射函数
调用用户函数数组
慢。我使用了一个类似的函数,在trait中使用
开关(count($args))
,并处理多达14个参数,最后默认为
调用用户函数数组
。它的基准测试速度比调用用户函数数组快得多,也比使用反射器快得多。我想我从未见过它达到默认值。它必须是一个荒谬的无法使用的函数,才能走到这一步。@mopsyd:很好的方法!
$reflector = new ReflectionFunction($fn);
return $reflector->invokeArgs($args);