PHP:共享数据库连接还是创建新连接?

时间:2012-02-11 09:19:48

标签: php design-patterns singleton

我建议不要将单例模式用于我的数据库类。我还没有完全理解它的缺点是什么,无论如何似乎在这一点上达成了一致,所以我遵守了这个规则。

但是,在PHP中共享类的实例是一个坏习惯吗?哪个最好从这里提供的两个例子?我实际上使用的是第一种方法的单例模式吗?

//semi-pseudo Code

Class DB extends mysqli{
    //
}

Class A {
    $db; //Of type Class DB, initialized in the constructor.

    //In some method

    //Should I do this, so sharing the data base connection?
    $b = new DB( $db );

    // OR

    // Should I instantiate a new instance?
    $newDb = new DB();
    $b = new B ($newDb);

}

Class B {
    $db;//Of type Class DB initialized in the constructor.

我有一个类DB作为数据库扩展..

我有A类,其成员类型为DB。

A类需要创建一个B类实例,而B类实例也有一个DB类型的成员。

我使用依赖注入模式,因此A应该将数据库实例传递给B.

我是否应该实例化一个新的数据库实例以传递给B,或者我可以只是将引用传递给A的数据库实例。

2 个答案:

答案 0 :(得分:2)

在PHP中使用Singleton模式没有任何问题,就像任何语言一样,太多的东西都可能表明设计不佳。

也就是说,Singleton非常适合数据库访问。有没有人证明为什么它被认为是一个坏主意?

反对Singleton的主要论点是难以测试,因为你不能用单元测试套件来模拟它们。我个人试图避免在我的测试中使用模拟对象(尤其是w / PHPUnit),所以通常没关系。

答案 1 :(得分:0)

  

我应该实例化一个新的数据库实例以传递给B,还是我可以   传递对A的数据库实例的引用。

当然,您必须将A的数据库实例的引用传递给B类。