【问题标题】:Should I pass a PDO object to every object, or make a new one for each object?我应该将 PDO 对象传递给每个对象,还是为每个对象创建一个新对象?
【发布时间】:2012-07-07 02:02:30
【问题描述】:

多年来,我主要从事过程式编程,并试图将自己的头脑集中在 OOP 和 PDO 上。我已经开始将我编写的应用程序转换为使用类而不是独立函数(这是一场噩梦,但我认为这将是值得的......)并且想使用 PDO 而不是常规的 mysql_* 函数。我有点坐立不安,边走边学,我不知道应该如何处理 PDO 对象。

我知道每次我需要进行查询时都创建一个新的 PDO 对象是愚蠢的,所以我可以看到两种方式:

  1. 在每个类中创建一个 PDO 对象(即每次创建一个对象时,调用一个成员函数来创建一个 PDO 以供它使用)。
  2. 在我的应用程序开始时创建 PDO 对象并将其传递给创建的每个对象的构造函数,并且所有对象共享 PDO 对象。

最好的方法是什么?

感谢您的建议!

【问题讨论】:

  • 一定要通过,不要多次创建。

标签: php mysql oop pdo


【解决方案1】:

根据应用程序的大小,您可能希望使用Singleton 来处理您的数据库连接。本质上,这将是一个包装您的数据库连接并具有将返回您的 PDO 对象的静态函数的类。然而,因为它是一个单例,它只会创建一个(假设你不让它更复杂)。这使您不必连续创建对象,也不必将一个对象传递给所有对象,从而将持久性与业务逻辑正确分离。

【讨论】:

  • “取决于应用程序的大小”是什么意思?你能详细说明一下吗?
  • 担心单例用于负载特别小的应用程序可能是矫枉过正。同样,较大的应用程序可能需要某种池化机制,这可能会或可能不会由单例提供最佳服务。我需要更多地了解您的用例,才能开始在这方面提出建议。
【解决方案2】:

不要超过一个。尝试管理所有数据库连接会发疯。

一个好的解决方案是创建一个singleton object 用于数据访问,并在您想使用数据库时通过它的静态访问器方法检索它。这样一来,您就只有一个地方可以管理 DB 访问和 PDO。如果你想多了解一点MVC,你也可以把所有的SQL代码都放在那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-04
    • 2012-07-15
    • 2013-09-23
    • 2015-09-15
    • 1970-01-01
    • 2011-09-09
    • 2019-09-23
    • 2015-06-29
    相关资源
    最近更新 更多