PHP:共享数据库连接或创建新连接


PHP: share database connections or create new one?

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

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

//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.

我有一个Class DB作为数据库扩展。。

我和一个DB类型的成员在A类。

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

我使用依赖注入模式,所以A应该将一个DB实例传递给B。

我应该实例化一个新的DB实例传递给B,还是只传递一个对a的DB实例的引用。

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

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

反对Singleton的主要论点是测试困难,因为你不能用单元测试套件来模拟它们。就我个人而言,我尽量避免在测试中使用mock对象(尤其是w/PHPUnit),所以这通常无关紧要。

我应该实例化一个新的DB实例以传递给B,还是我可以传递对a的DB实例的引用。

当然,您必须将a的DB实例的引用传递给B类。