【发布时间】:2017-01-04 10:56:16
【问题描述】:
我一直在查看 laravel 源代码,在 callStatic 魔术方法中偶然发现了这一点:
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);
}
为什么先用switch语句,再用call_user_func_array()?
【问题讨论】:
-
可能是为了性能。
call_user_func_array比直接调用方法要慢,所以大多数情况下(最多 4 个参数)使用直接方法 -
可能是代码没有经过任何情况,所以默认是先执行
-
检查count($args)的值
-
我还要说这只是一种性能优化,因为直接调用函数比使用 call_user_func_array 调用它更快
标签: php laravel switch-statement magic-methods