Industrial
Industrial

Reputation: 42758

PHP OOP: Creating database class

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(--.)
    }
}

Upvotes: 0

Views: 2346

Answers (3)

Crozin
Crozin

Reputation: 44376

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.

Upvotes: 1

Rachel McMahan
Rachel McMahan

Reputation: 392

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

Upvotes: 1

Dai
Dai

Reputation: 1510

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.

Upvotes: 0

Related Questions