这个switch语句不是废话吗?
Isn't this switch statement a nonsense?
我在 Laravel 5 core 中发现了这个奇怪的 switch 语句:
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);
他们可能决定建造这样的东西而不是仅仅使用它有什么原因吗?
return call_user_func_array([$instance, $method], $args);
有什么好处吗?
可能有最多 4 个参数的函数需要按值传递而不是按引用传递。请注意函数文档中有关 PHP 5.4 之前用法的注释。 call_user_func_array docs
恕我直言,程序员避免 call_user_func_array()
进行合理数量的典型调用 $instance->method()
。当然直接调用方法比使用call_user_func_array()
更快。代码是用爱写的:)
我在 Laravel 5 core 中发现了这个奇怪的 switch 语句:
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);
他们可能决定建造这样的东西而不是仅仅使用它有什么原因吗?
return call_user_func_array([$instance, $method], $args);
有什么好处吗?
可能有最多 4 个参数的函数需要按值传递而不是按引用传递。请注意函数文档中有关 PHP 5.4 之前用法的注释。 call_user_func_array docs
恕我直言,程序员避免 call_user_func_array()
进行合理数量的典型调用 $instance->method()
。当然直接调用方法比使用call_user_func_array()
更快。代码是用爱写的:)