Laravel 5.1
的 Facade
类 的 __callStatic
方法代码如下:
public static function __callStatic($method, $args)
{
$instance = static::getFacadeRoot();
if (! $instance) {
throw new RuntimeException('A facade root has not been set.');
}
switch (count($args)) {
case 0:
return $instance->$method();
case 1:
return $instance->$method($args[0]);
case 2:
return $instance->$method($args[0], $args[1]);
case 3:
return $instance->$method($args[0], $args[1], $args[2]);
case 4:
return $instance->$method($args[0], $args[1], $args[2], $args[3]);
default:
return call_user_func_array([$instance, $method], $args);
}
}
为什么不直接写成:
public static function __callStatic($method, $args)
{
$instance = static::getFacadeRoot();
if (! $instance) {
throw new RuntimeException('A facade root has not been set.');
}
return call_user_func_array([$instance, $method], $args);
}
答:
call_user_func_array
效率偏低。基准测试如下
对比范围
直接调用
变量函数调用
call_user_func
调用call_user_func_array
调用测试结果
我们可以看到,
call_user_func_array
所用时间为:1.1608240604401s测试过程
测试代码如下: