为什么在像疙瘩这样的ioc容器中使用匿名函数

时间:2014-12-31 18:34:50

标签: php oop inversion-of-control

我知道在Pimple容器中,依赖关系被声明为

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

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

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

有什么区别?

1 个答案:

答案 0 :(得分:4)

区别在于lazy loading,特别是lazy initialization

在您的第一个示例中,SomeClass实际上并未在请求之前进行实例化。在您的第二个示例中,它会立即实例化。因此,即使请求永远不会访问数据库,也会创建对象并建立连接。

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