PHP OOP:创建数据库类

时间:2011-02-10 16:41:42

标签: php mysql oop

我正在OOP世界迈出第一步 - 请耐心等待 我知道同时打开许多正在进行的mySQL连接对于性能来说可能是致命的,因此建立一个考虑到这一点的数据库类应该是一个好主意。

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

以下是代码:

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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。但是在这种情况下SessionDatabase类型的对象,因此每次编写new Database()new Session()时都会调用构造函数,因此也会调用mysql_connect()

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

答案 2 :(得分:0)

为什么不

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

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