dongxun1142
2011-02-10 16:41
浏览 45
已采纳

PHP OOP:创建数据库类

I am making my first steps in the OOP world - please bear with me.
I know that having many ongoing mySQL connections open at the same time can be fatal for performance, so it should be a good idea to make a database class that takes this into account.

Is $this->session->write(...); going to result in a new mySQL connection being opened each time? Or is that up to the "persistent connection" feature in mySQL?

Here's the code:

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

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

图片转代码服务由CSDN问答提供 功能建议

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

$ this-> session-> write(...); 每次都会打开一个新的mySQL连接? 或者是“持久连接”功能 在mySQL中?

这是代码:

 抽象类数据库{
 function __construct(){
 // mysql_connect()  
} 
 
 
 
 nclass会话扩展数据库{
 function write(){
 // mysql_query( - 。)
} 
} 
   
 <  / DIV>
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • duanmei1930 2011-02-10 17:03
    已采纳

    Is session handler some kind of specialized type of database? It is not, so don't use inheritance (a is a relationship). Session handler uses database so you should use composition (a has a relationship):

    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);
    

    Also, don't use mysql_*() functions. Use much more powerful PDO.


    Returning to your question... mysql_connect() will be executed every time you create a new Database object. However in this case Session is an object of type Database so every time you write new Database() or new Session() the constructor is invoked, therefore mysql_connect() is invoked as well.

    PS. mysql_connect() function won't create a new connection if specified connection already exists. Check 4th argument of this function to learn more.

    打赏 评论
  • duana1986 2011-02-10 16:47

    Why not

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

    I'm not sure of the syntax, I don't do OOP PHP. Anyway, in your structure above a new connection would be opened for each "session" instance so assuming you only create one instance of "session" you won't be openeing loads of database connections.

    打赏 评论
  • dtlrp119999 2011-02-10 16:54

    mysql_query will create a new connection only if no previous mysql connection has been made. Otherwise, it will either use the connection you specify or the last connection opened with mysql_connect. http://php.net/manual/en/function.mysql-query.php

    打赏 评论

相关推荐 更多相似问题