PHP OOP: создание класса базы данных - PullRequest
0 голосов
/ 10 февраля 2011

Я делаю свои первые шаги в мире ООП - пожалуйста, потерпите меня.
Я знаю, что наличие множества открытых соединений mySQL одновременно может быть фатальным для производительности, поэтому стоит сделатькласс базы данных, который учитывает это.

Будет ли $this->session->write(...); приводить к открытию нового соединения mySQL каждый раз?mySQL?

Вот код:

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

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

Ответы [ 3 ]

1 голос
/ 10 февраля 2011

mysql_query создаст новое соединение, только если ранее не было установлено соединение mysql.В противном случае он будет использовать указанное вами соединение или последнее соединение, открытое с помощью mysql_connect.http://php.net/manual/en/function.mysql-query.php

1 голос
/ 10 февраля 2011

Является ли обработчик сессии каким-то специализированным типом базы данных?Это , а не , поэтому не используйте наследование ( - это отношение ).Обработчик сеанса использует базу данных , поэтому вы должны использовать композицию ( имеет отношение ):

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() функция не будет создавать новое соединение, если указанное соединение уже существует.Проверьте 4-й аргумент этой функции, чтобы узнать больше.

0 голосов
/ 10 февраля 2011

Почему бы не

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

Я не уверен в синтаксисе, я не использую ООП PHP.В любом случае, в приведенной выше структуре новое соединение будет открываться для каждого экземпляра сеанса, поэтому при условии, что вы создадите только один экземпляр сеанса, вы не будете открывать множество соединений с базой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...