#php #mysqli
#php #mysqli
Вопрос:
Я администрирую систему, которая довольно старая. На данный момент это кодовый суп, и постепенно я рефакторил код.
Что-то, что я заметил, делая это, заключалось в том, что 90% запросов были CRUD. Никаких объединений, ничего больше. Все действительно просто.
В результате я создал класс модели, который охватывает эти типы запросов. Затем я расширяю класс модели для каждой таблицы.
class Model extends MySQLi {
public function __construct() {
global $site;
$mysql = $site['mysql'];
parent::__construct($mysql['host'], $mysql['user'], $mysql['pass'], $mysql['db']);
}
Мне не нравится использование глобального, но это позволяет мне делать это, не беспокоясь о деталях подключения.
<?php
class Contact extends Model {
public $table = 'contact';
}
$Contact = new Contact;
$Contact->get(array('where'=>array('id >' => 4), 'limit' => array(0, 20));
Меня беспокоит то, что если скрипту требуется 3 таблицы. Я буду использовать 3 модели, и, следовательно, это наверняка означает, что у меня будет 3 независимых подключения к базе данных? По одному для каждого класса?
Будет ли это проблемой, как я думаю?
Есть ли обходной путь, который позволит мне продолжать расширять MySQLi и, возможно, передавать ему активное соединение вместо сведений о подключении, чтобы он мог установить собственное соединение?
Комментарии:
1. Взгляните на использование шаблона singleton для подключения к базе данных: php.net/manual/en/language.oop5.patterns.php
2. Посмотрите, почему вам не следует использовать шаблон singleton для подключения к базе данных: google.nl /…
Ответ №1:
Не расширяйте Mysqli, просто включите его в свою модель.
class Model {
protected $db;
public function __construct($db) {
$this->db = $db; // the mysqli instance.
}
.....
}