PHP-DI 5:值和定义的缓存



我正在使用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请求时在运行时读取配置文件。


您是否将缓存与"单例"混淆了?也许此文档可以提供帮助。

相关内容

  • 没有找到相关文章

最新更新