我正在使用PHP-DI 5依赖注入容器,我已经阅读了有关definitions caching的文档。虽然我在这方面仍然不确定......所以我想问你:
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'));
非常感谢。
答案 0 :(得分:0)
似乎你对“缓存”的含义感到困惑。
缓存的内容是 definitions 。定义描述了如何创建对象。它被缓存,因为读取配置文件,或阅读PHP的反射或阅读注释可能很昂贵。
1)如果我直接将一个对象设置为容器中的条目值,该条目是否会被缓存?
由于直接设置了对象,因此没有定义。所以没有任何缓存。
2)现在假设该对象已在容器中定义,位于定义文件中:
如果定义是一个闭包(匿名函数),那么它就不会被缓存,因为闭包不能存储到缓存中。
如果你使用的不是闭包,那么定义将被缓存,以避免在每次HTTP请求时在运行时读取配置文件。
您是否将缓存与“单身人士”混为一谈?也许this documentation可以提供帮助。