2012-01-31 78 views
0

我目前正在购物车中使用自定义Mysql类发送查询到数据库。PHP OOP - Php对象扩展Mysql对象=多个Mysql连接?

在这个项目中,我打算扩展这个MySQL类为每个对象,我会用:类别,产品,购物车。

如果我创建这样一个类:

class Catalog_Categories extends Mysql{} 

然后又是一个这样的:

class Catalog_Products extends Mysql{} 

使用相同的Mysql对象对DB连接这些类或他们使用2个独立的连接?

我有点失落。

谢谢!

Carl。

+1

每个MySQL的类应代表独立的连接,你应该写这将只有一个MySQL实例,并提供这种情况下您Catalog_ *类静态类。 – Vyktor 2012-01-31 01:27:23

+0

感谢您的快速帮助。非常感激! – 2012-01-31 01:28:55

回答

1

假设您在Mysql类中创建了数据库连接,那么您创建的任何扩展类都将创建一个新的数据库连接。

有几种方法来避免这种情况,例如,你可以创建你的数据库中的一个全局连接,并通过该连接到你的类的构造函数,使它们都将使用相同的连接。

+0

非常感谢。它有助于! :) – 2012-01-31 01:36:17

2

这取决于你的Mysql类是如何写入的。如果使用Singleton模式编写它,它将维护一个数据库实例。你可以把它写成Factory模式并让它为每个使用它的对象生成一个新的实例。还有很多其他的模式和可能性,所有这些都取决于您希望如何工作以及如何编写自定义Mysql类。

+0

感谢您的快速回复。 Mysql类使用_construct上的mysql_connect。那么这意味着每个对象有1个mysql连接吗?再次感谢:) – 2012-01-31 01:38:55

+0

对。如果你将它存储为一个静态类变量,然后在构造中添加了代码来检查数据库连接是否已经实例化并返回,那么它将是单例模式并且只有一个数据库连接实例。 – 2012-01-31 02:21:03

1

这些类是使用相同的Mysql对象在数据库上连接还是使用2个单独的连接?

,直到我们看到完整的代码我们不能回答这个问题。

但是在这种情况下扩展看起来像个坏主意。如果你不能说class A is a class B - 那么你应该更喜欢构图而不是继承。这意味着Catalog_Products应该具有对mysql对象的引用,但应该不对进行扩展。

为了让你知道什么时候继承是有道理的是class mysql extends database。在这种情况下,你可以“mysql是一个数据库”,所以这里延伸看似合理,只要database类封装了常见的逻辑和mysql类表示更详细的细节。

+0

嗨,这将帮助我确定。谢谢您的帮助。 :) – 2012-01-31 01:42:31