Оптимальное использование объекта PDO - PullRequest
0 голосов
/ 11 июня 2018

Система использует один класс User, и большинство методов используют PDO для обмена данными с базой данных.

class User {

    private $db_server;
    private $db_login;
    private $db_pass;
    private $db;

    public function method_1(){
        $statement = new PDO("mysql:host=".$this->db_server.";dbname=".$this->db, $this->db_login, $this->db_pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    //doing something with PDO
    }
// ...
    public function method_n(){
        $statement = new PDO("mysql:host=".$this->db_server.";dbname=".$this->db, $this->db_login, $this->db_pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    //doing something with PDO
    }
}

Вопрос в том, эффективно ли я использую PDO?Должен ли я создавать экземпляр объекта PDO в качестве одного из свойств класса и передавать его каждому методу, который в этом нуждается, вместо создания нового объекта PDO в самом методе?

1 Ответ

0 голосов
/ 11 июня 2018

Вы должны взглянуть на инъекцию зависимостей.

Основная идея заключается в том, что вы вводите составной и полный объект PDO (зависимость) при создании пользователя.Попробуйте настроить PDO только один раз в вашем приложении и получить его через шаблон синглтона.Таким образом, у вас есть только этот один экземпляр.

Например,

$pdo = new PDO($connString);
$user = new User($pdo); 

Обязательно добавьте свойство объекта в User, чтобы вы могли получить доступ к $ this-> pdo.

Это только один из подходов к решению вашей проблемы, но это не самый эффективный способ.

Если вы собираетесь использовать принцип наилучшей практики, вы вообще не будете использовать объект PDO в User.Вместо этого вы должны построить Object-Relational-Mapper (ORM).При таком подходе у вас будет центральный Entity-Manager, который содержит адаптер базы данных, в вашем случае pdo.Этот объект-менеджер будет принимать пользователя и может применять к нему операции базы данных, такие как удаление, создание, обновление.Вы должны определить общее отображение, чтобы свойства объекта равнялись столбцам таблицы.

Не стесняйтесь спрашивать, нужна ли вам дополнительная информация :)

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