<code> public function __construct($config) { parent::__construct(); $this['config'] = function () use ($config) { return new Config($config); }; ... 其中 $this['config'] = function () use ($config) { return new Config($config); 能不能直接写成这样: $this['config'] = new Config($config); 有什么优势?</code>
<code> public function __construct($config) { parent::__construct(); $this['config'] = function () use ($config) { return new Config($config); }; ... 其中 $this['config'] = function () use ($config) { return new Config($config); 能不能直接写成这样: $this['config'] = new Config($config); 有什么优势?</code>
惰加載。這兩種寫法都可以,但是。 $this['config'] = new Config($config);
這種方式,當你給$this->['config']
賦值的時候,即進行了new Config($config )
操作。
<code class="php">$this['config'] = function () use ($config) { return new Config($config); }</code>
這種方式,你只是給$this->['config']
一個匿名函數,當你要用到的時候,才會進行new Config($config)
的操作。
不知道我這種解釋對不對= =比較不善表達= =
<code>能不能直接写成这样: $this['config'] = new Config($config); 有什么优势?</code>
完全可以寫成這樣,只不過每次在實例化的時候都會去new Config這個類,並不管用不用的到;
<code>$this['config'] = function () use ($config) { return new Config($config); }</code>
這種寫法呢,是給$this['config']宣告了一個匿名函數,當$this['config']被真正呼叫的時候才會去new Config這個類別;
這樣寫的好處的是,當$this['config']不被真正使用時,減少了額外實例化的過程和記憶體的消耗
closure會在真正呼叫的時候才new一個Config, 這樣就可以實作了lazy load.
除了上面的懶加載
, 還有一個好處是實現了一個工廠模式
-- 每次拿config都是新new出來的
1、懶加載
大家都說到了
2、其實匿名函數很大程度函數式程式設計
的一個體現