我建议不要将单例模式用于我的数据库类。我还没有完全理解它的缺点是什么,无论如何似乎在这一点上达成了一致,所以我遵守了这个规则。
但是,在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的数据库实例。
答案 0 :(得分:2)
在PHP中使用Singleton模式没有任何问题,就像任何语言一样,太多的东西都可能表明设计不佳。
也就是说,Singleton非常适合数据库访问。有没有人证明为什么它被认为是一个坏主意?
反对Singleton的主要论点是难以测试,因为你不能用单元测试套件来模拟它们。我个人试图避免在我的测试中使用模拟对象(尤其是w / PHPUnit),所以通常没关系。
答案 1 :(得分:0)
我应该实例化一个新的数据库实例以传递给B,还是我可以 传递对A的数据库实例的引用。
当然,您必须将A的数据库实例的引用传递给B类。