【问题标题】:PHP OOP: Creating database classPHP OOP:创建数据库类
【发布时间】:2011-02-10 16:41:41
【问题描述】:

我正在 OOP 世界中迈出第一步 - 请多多包涵。
我知道同时打开许多正在进行的 mySQL 连接可能会对性能造成致命影响,因此创建一个考虑到这一点的数据库类应该是个好主意。

$this->session->write(...); 是否会导致每次打开新的 mySQL 连接? 还是这取决于 mySQL 中的“持久连接”功能?

代码如下:

abstract class database {
    function __construct() {
       //mysql_connect()
    }
}

class session extends database {
    function write () {
       // mysql_query(--.)
    }
}

【问题讨论】:

    标签: php mysql oop


    【解决方案1】:

    会话处理程序是某种特殊类型的数据库吗?它是not,所以不要使用继承(is a 关系)。会话处理程序使用数据库,因此您应该使用组合(具有关系):

    class Session {
        protected $db;
    
        public function __construct(DB $db) {
            $this->db = $db;
        } 
    
        public function write() {
            $this->db->query(...);
        }
    }
    
    
    $db = new DB(...);
    $session = new Session($db);
    

    另外,不要使用mysql_*() 函数。使用更强大的PDO。


    回到您的问题... mysql_connect() 将在您每次创建新的Database 对象时执行。但是在这种情况下,Session 是 Database 类型的对象,因此每次编写 new Database() 或 new Session() 时都会调用构造函数,因此也会调用 mysql_connect()。

    PS。如果指定的连接已经存在,mysql_connect() function 将不会创建新连接。检查此函数的第 4 个参数以了解更多信息。

    【讨论】:

    • 嗨 Crozin,有没有像你的例子那样做的好方法,但是在我的代码中只设置了一次 new Session($db); 中的 $db-variable,所以我不需要将它加载到每次都依赖于数据库类的每个类?伟大的图片顺便说一句:)
    • 另外 - 这stackoverflow.com/questions/1716652/… 也是解决这个问题的方法吗? (单例模式)
    • Singleton 似乎是一个很酷、快速的解决方案,但在这里使用它是一个可怕的想法。在这里,您正在处理dependecny injection。如果手动传递依赖项变得烦躁或难以辨认,请考虑使用DIC
    【解决方案2】:

    mysql_query 只有在没有建立之前的 mysql 连接时才会创建一个新的连接。否则,它将使用您指定的连接或使用 mysql_connect 打开的最后一个连接。 http://php.net/manual/en/function.mysql-query.php

    【讨论】:

      【解决方案3】:

      为什么不

      class database {
          function __construct() {
             //mysql_connect()
          }
          function write() {
             //query the DB
          }
      }
      

      我不确定语法,我不做 OOP PHP。无论如何,在您上面的结构中,将为每个“会话”实例打开一个新连接,因此假设您只创建一个“会话”实例,您将不会打开大量的数据库连接。

      【讨论】:

      • 嗨戴 - 所以每次我需要调用 write() 方法时,您的示例不会打开新连接?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 2015-10-13
      • 1970-01-01
      • 2014-01-11
      • 2012-03-27
      • 1970-01-01
      • 2015-03-27
      相关资源
      最近更新 更多