php - 为什么在像Pimple这样的ioc容器中使用匿名函数

标签 php oop inversion-of-control

我知道在 Pimple 容器中,依赖项声明为

$container = new Pimple(); 
$container['db'] = function (){
  return new SomeClass; 
}; 

我的问题是,如果我只是将依赖项声明为像这样的简单数组会怎样。

$container = new Pimple();
$container['db'] = new SomeClass; 

有什么区别?

最佳答案

不同之处在于所谓的 lazy loading , 具体来说 lazy initialization .

在您的第一个示例中,SomeClass 在被请求之前并未实际实例化。在您的第二个示例中,它会立即实例化。因此,即使请求从未到达数据库,也会创建对象并建立连接。

通过使用您的第一个示例,如果请求从未实际使用数据库,则永远不会建立与数据库的连接。

关于php - 为什么在像Pimple这样的ioc容器中使用匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27725000/

相关文章:

php - 如何使用 Treebuilder 在 Bundleless 应用程序中加载自定义配置文件?

php - 在 EOT 中插入带有 PHP 变量的 python 代码

java - 返回私有(private)列表(在类里面)的迭代器是否被认为是不好的做法?

python - 我需要一个具有类继承的 Python 3 类组合结构。我该如何实现这个目标?

php - 如何使用 Laravel 的 url 生成器助手生成一个带有不在末尾的参数的 url?

php - 登录 yii 后使用额外的数据库

java - 继承类中的静态成员变量

c# - 如何指定 Unity 在解析服务时使用的构造函数?

c# - 如何使用 Autofac 注册开放通用接口(interface)的所有实现

c# - 如何在运行时解析类型以避免多个 if else