如果我在Silex應用程序中定義一個服務,我可以期望主容器(Application)作爲參數傳遞,或者可以使用「use($ app)」語句從當前作用域中獲取它。
的官方文檔在http://silex.sensiolabs.org/doc/services.html有這個片斷:
$app['some_service'] = function ($app) {
return new Service($app['some_other_service'], $app['some_service.config']);
};
但它同樣可寫成
$app['some_service'] = function() use ($app) {
return new Service($app['some_other_service'], $app['some_service.config']);
};
,我已經看到了很多這樣的例子代碼。這僅僅是個人愛好,還是其中一種對性能,內存使用或代碼隔離有好處?
編輯: 我已經運行的 「使用」 perfromance比較VS參數VS簡單的函數:
$func = function() use ($app) {...};
$func = function ($app) {...};
function test($app) {...}
第一種是最慢的,但總體差小於25% 。而任何微觀優化,只有當你有成千上萬的微觀優化時,纔會引人注意,因爲最快和最慢之間的時間差約爲1/1000萬分之一秒(對於100萬次的0.05秒)。
因此不應考慮性能差異。
只是讓你知道,暗瘡容器(其中Silex的適用範圍擴大)不得不本身(容器)傳遞給能力服務來自非常[第一版](https://github.com/silexphp/Pimple/commit/e677a530fd580e5e6036c7e0b9ce994b06480fee#diff-553037d9adc48bbece4ab185700cf095R19)。我認爲這是首選的方式,因爲您不需要將父範圍變量導入到clousure中,這應該更有效率(儘管我沒有測試過)。讓我們等待,如果有人提供比我的評論更好的答案:-) – mTorres