PHP OOP:创建数据库类

PHP OOP:创建数据库类,php,mysql,oop,Php,Mysql,Oop,我正在OOP世界迈出第一步-请耐心等待。 我知道,同时打开许多正在进行的mySQL连接可能会对性能造成致命影响,因此制作一个考虑到这一点的数据库类应该是一个好主意 是$this->session->write(…)每次都会打开一个新的mySQL连接吗? 或者这取决于mySQL中的“持久连接”功能 代码如下: abstract class database { function __construct() { //mysql_connect() } } class

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

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

代码如下:

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

class session extends database {
    function write () {
       // mysql_query(--.)
    }
}
为什么不呢

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

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

mysql\u仅当以前没有建立mysql连接时,查询才会创建一个新连接。否则,它将使用您指定的连接或使用mysql\u connect打开的最后一个连接

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

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


回到你的问题<每次创建新的
数据库
对象时,都会执行code>mysql\u connect()
。但是,在本例中,
Session
是类型为
Database
的对象,因此每次编写
newdatabase()
newsession()
时,都会调用构造函数,因此也会调用
mysql\u connect()


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

Hi-Dai-这样您的示例就不会在每次我需要调用
write()
方法时打开新的连接了吗?Hi-Crozin,有没有像您的示例那样的好方法,但是在
新会话($db)中使用
$db
-变量在我的代码中只设置一次,所以我不需要每次都将其加载到依赖于数据库类的每个类中?伟大的图片顺便说一句:)也-这也是一个解决方案吗?(单例模式)单例似乎是一个很酷、快速的解决方案,但在这里使用它是一个可怕的想法。这里,你正在处理。如果传递的依赖性手动变得易怒或难以辨认,请考虑使用
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);