PHP — улучшение моей модели базы данных?

#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.
    }
    .....
}