
贴代码:
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); } } 直接 return call_user_func_array([$instance, $method], $args); 不好吗?难道判断一下参数数量,速度快一点?
PS:我记得我以前一个同事也是这么写的,真是深得 Laravel 精髓,后悔没追着问为什么这么做
1 Rekkles 2019-11-12 18:27:15 +08:00 版本多少? 现在是 return $instance->$method(...$args); 一个完事啊 |
2 des 2019-11-12 18:31:05 +08:00 快不快,快多少测一下就知道了啊 |
3 JJstyle OP |
4 agdhole 2019-11-12 18:41:52 +08:00 现在都 6.5 了,5.1 的源码也太老了吧 |
5 mcfog 2019-11-12 19:05:56 +08:00 via Android 就是快 |
6 mcfog 2019-11-12 19:12:36 +08:00 via Android 手残发出去了,实际上你可以在很多语言的高度优化的类库里看到类似的东西 https://github.com/lodash/lodash/blob/4.17.15/lodash.js#L4982 https://backbonejs.org/docs/backbone.html#section-49 印象里 jquery 好像也有,懒得找了 |
7 niucility 2019-11-12 19:21:24 +08:00 version 5.6 return $instance->$method(...$args); |
9 wslsq 2019-11-12 20:10:40 +08:00 |
10 mrgeneral 2019-11-12 21:02:36 +08:00 善用搜索: https://segmentfault.com/q/1010000012081290 目的就是性能优化。 类似的细节点很多,比如:PHP7 之前还可以用 isset 来判定字符串长短,性能提升明显,PHP7 之后就没必要了。 |