簡體   English   中英

PHP-DI 5:值和定義的緩存

[英]PHP-DI 5: Caching of values and definitions

我正在使用PHP-DI 5依賴項注入容器,並且已經閱讀了有關定義緩存的文檔。 盡管我仍然不確定這方面...所以我想問你:

1)如果我直接將對象設置為容器中的條目值,該條目是否會被緩存?

$builder = new ContainerBuilder();
$builder->setDefinitionCache(new ApcCache());
$container = $builder->build();

$response = new Response();

// Will this entry be cached?
$container->set(ResponseInterface::class, $response);

2)現在假設對象已經在容器的定義文件中定義:

return [
    'response' => function () {
        return new Response();
    },
];

如果我執行以下操作:

$builder = new ContainerBuilder();
$builder->setDefinitionCache(new ApcCache());
$container = $builder->build();

// Will this entry be cached?
$container->set(ResponseInterface::class, DI\get('response'));
  • 條目將被緩存,或
  • 會引發錯誤,還是
  • 條目將被“靜默地”緩存嗎?

非常感謝你。

似乎您對“緩存”的含義感到困惑。

緩存的是定義 定義描述了如何創建對象。 緩存它是因為讀取配置文件,讀取PHP的反射或讀取注釋可能很昂貴。

1)如果我直接將對象設置為容器中的條目值,該條目是否會被緩存?

由於直接設置對象,因此沒有定義。 因此,沒有任何緩存。

2)現在假設對象已經在容器的定義文件中定義:

如果像您的示例中那樣定義是一個閉包(匿名函數),則它將不會被緩存,因為閉包無法存儲到緩存中。

如果您使用的不是閉包,則定義將被緩存以避免在運行時針對每個HTTP請求讀取配置文件。


您是否將緩存與“單個”混淆? 也許此文檔可以提供幫助。

暫無
暫無

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

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