有人建议我不要在数据库类中使用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类。