繁体   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