【问题标题】:PHP OOP - Php objects extends Mysql Object = Multiple Mysql Connection?PHP OOP - PHP 对象扩展 Mysql 对象 = 多个 Mysql 连接?
【发布时间】:2012-02-22 19:14:45
【问题描述】:

我目前正在使用自定义 Mysql 类向数据库发送查询的购物车。

在这个项目中,我计划为我将使用的每个对象扩展这个 Mysql 类:类别、产品、购物车。

如果我创建一个这样的类:

class Catalog_Categories extends Mysql{}

然后是这样的另一个:

class Catalog_Products extends Mysql{}

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

我有点迷茫。

谢谢!

卡尔。

【问题讨论】:

  • 每个 mysql 类应该代表单独的连接,你应该编写一个只有一个 mysql 实例的静态类,并将这个实例提供给你的 Catalog_* 类。
  • 感谢您的快速帮助。非常感谢!

标签: php mysql oop class


【解决方案1】:

假设您在 Mysql 类中创建数据库连接,您创建的任何扩展类的每个对象都会创建一个新的数据库连接。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您的快速回复。 Mysql 类在 _construct 上使用 mysql_connect。所以这意味着每个对象有 1 个 mysql 连接对吗?再次感谢:)
    • 对。如果您将其存储为静态类变量,然后在构造中添加代码以检查数据库连接是否已被实例化并返回,那么它将是一个单例模式并且只有一个数据库连接实例。
    【解决方案3】:

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

    在看到完整代码之前,我们无法回答这个问题。

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

    为了让你知道什么时候继承是合理的,class mysql extends database。在这种情况下你可以说“mysql 是一个数据库”,所以这里的扩展看起来是合理的,只要database 类封装了通用逻辑,mysql 类表示更详细的细节。

    【讨论】:

    • 嗨,这肯定会帮助我。谢谢您的帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-10-27
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2011-11-19
    • 2014-08-24
    相关资源
    最近更新 更多