Я создаю веб-приложение с различными классами для таких вещей, как пользователь, элемент управления Smarty и т. Д.
У меня уже есть класс базы данных, и все хорошо, но я беспокоюсь о его производительности.
В настоящее время в другом классе я делаю $this->db = new DB()
для создания экземпляра локальной базы данных, однако функция __construct()
класса базы данных создает новое соединение с сервером MySQL каждый раз, когда я создаю новый экземпляр DB()
, что явно менее чем разумно. Это означает, что каждый экземпляр всех моих разных классов, использующий класс базы данных, устанавливает соединение с сервером. У меня нет большого количества классов, но я хочу только один для каждой загрузки страницы.
Это урезанный образец того, что у меня есть на данный момент:
// Database class used by multiple other classes
class DB {
private $dbh;
function __construct() {
$this->dbh = // PDO connection here
}
public function query($str) {
// Do a query
}
}
// Example class User
class User {
private $db; // Stores local instance of DB class.
function __construct() {
$this->db = new DB(); // Makes a new connection in DB::__construct()
}
public function login() {
$this->db->query('SELECT * FROM users');
}
}
Я ищу "лучшую" или наиболее распространенную практику для этого. Я не хочу делать 10 отдельных подключений для каждой загрузки страницы.
Я хочу знать, как лучше всего использовать класс БД в моем приложении и управлять им. Вот мои четыре мысли:
- Будет ли использование постоянного подключения к серверу MySQL решить эту проблему с несколькими подключениями для меня?
- Должен ли я использовать статический фабричный класс и возвращать экземпляр БД вместо использования
new DB()
?
- Правильное ли решение использовать полностью статический класс и просто делать
DB::query()
(например) каждый раз, когда я ссылаюсь на него?
- Я часто использую несколько классов в другом (поэтому у нас может быть класс Folders, который требует классов User, DB и Smarty). Является ли это общей практикой для
extend
каждого класса как-нибудь?