簡體   English   中英

Silex服務 - $ app參數或“use($ app)”聲明?

[英]Silex service - $app parameter or “use ($app)” statement?

如果我在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']);
};

我已經看過很多這樣的代碼示例。 它只是個人品味還是其中一種比其他產品更有優勢,例如性能,內存使用或代碼隔離?


編輯:我運行了“使用”與參數與簡單函數的性能比較:

$func = function () use ($app) {...};
$func = function ($app) {...};
function test($app) {...}

第一個是最慢的,但總體差異小於25%。 並且作為任何微優化,只有當你有成千上萬的這些時才會引人注意,因為最快和最慢之間的時差約為1 / 10,000,000秒(100萬代表為0.05)。

因此不應考慮性能差異。

這是一個直接的答案:沒有實際的區別。 我可以看到use ($app)不起作用的唯一情況是在單獨的文件中定義一些條目。

以下是你好奇的事情;)

在參數中再次傳遞容器的優點是它允許Silex傳遞另一個容器實例。 Silex不這樣做,所以它不會影響你。 但其他一些容器呢。

容器執行此操作的主要原因是,如果您有一個具有多個容器的復雜設置,這些容器一個接一個地鏈接: ParentContainer - > SubContainer SubContainer定義條目時,您希望能夠從父容器中獲取依賴項(它將自動查看子容器中的依賴項)。 因此,子容器將在closure參數中傳遞parentcontainer。

這是一個高級(和罕見)用例,但知道它很有趣;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM