[英]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.