我正在使用php-di 5依赖项注入容器,我已经阅读了有关定义缓存的文档。虽然我仍然不确定这方面...所以我想问你:
1(如果i 直接将对象作为容器中的条目值,则会被缓存?
吗?$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, DIget('response'));
- 将被缓存或
- 将提出错误,
- 该条目会"默默地"放置吗?
非常感谢。
看来您对"缓存"的含义感到困惑。
缓存是定义。一个定义描述了如何创建对象。之所以缓存,是因为阅读配置文件或阅读PHP的反射或阅读注释可能很昂贵。
1(如果我将对象直接设置为容器中的入口值,将被缓存?
由于直接设置对象,因此没有定义。所以没有任何缓存。
2(现在,假设对象已经在容器中定义,在定义文件中:
如果定义是闭合(匿名函数(,则不会在示例中进行缓存,因为封闭无法存储在缓存中。
如果您使用闭合以外的其他内容,则定义将被缓存,以避免在每个HTTP请求时在运行时读取配置文件。
您是否将缓存与"单例"混淆了?也许此文档可以提供帮助。