Есть ли правильный способ обработки подключения к базе данных в классе?

#php #database #class #interface

#php #База данных #класс #интерфейс

Вопрос:

Обычно я храню объект PDO как элемент. Однако во время практического внедрения зависимостей у меня возникла проблема, из-за которой я не могу выбрать элегантный способ обработки подключения к базе данных.

!! Что я сделал. При каждом создании экземпляра класса я всегда передаю объект PDO конструктору. Конструктор хранит ссылку на данный объект PDO.

 class Examples
{
    /* Properties */
    public $db;

    /* Constructor */
    public function __construct(PDO amp;pdo)
    {
        $this->db = $pdo;
    }

    //..
}
  

Это работает хорошо, даже если я страдаю от неизвестной причины. Меня преследуют некоторые сомнения в bzar, Am I doing right?

Главный вопрос в том, как я могу предоставить подключение к базе данных определенному классу? расширить PDO? передать объект PDO в качестве параметра? или создать другой класс, расширяющий PDO и реализующий оба? ..??? ??? ???????????? ; OTL

Ответ №1:

Вам не нужно передавать $pdo в качестве ссылки, используя амперсанд, потому что в PHP объекты передаются по ссылкам по умолчанию. Ваш пример в порядке. Никогда не расширяйте свой класс entity / model с помощью PDO, если не используете специализированную версию PDO. Если у вас много классов, использующих $ pdo и другие сервисы (такие как сеансы, файловая система, API и т.д.), Вы можете подумать о создании диспетчера служб (контейнера), а затем вызвать его, чтобы получить повторно используемые объекты, такие как ваш $ pdo. В случае, если вы замените PDO чем-то другим в будущем, вам не нужно переписывать все классы, которые используют его в качестве аргумента.