Как передать объект БД в класс? Мужики, запутался. Есть базовый класс App, в который должен быть передан объект БД PDO. У меня три варианта решения, но я чёт запутался с передачей, не пойму, какой лучше (верный), хотя работают все.Вариант 1class App{ protected $db; public function __construct(){ $this->db = new PDO('mysql:host=localhost;dbname=dbname', 'user', 'pass'); } }Вариант 2class App{ protected $db; public function initDB(PDO $db){ $this->db = $d; } } class DB{ public $db; public function instance(){ $this->db = new PDO('mysql:host=localhost;dbname=dbname','user','pass'); return $this->db; } } $app = new App(); $db = new DB(); $app->initDB($db->instance());Вариант 3class App{ protected $db; public function initDB(PDO $db){ $this->db = $d; } } class DB{ public $db; public function __construct(){ $this->db = new PDO('mysql:host=localhost;dbname=dbname','user','pass'); } } $db = new DB(); $app = new App(); $app->initDB($db);
Все три варианта имеют право на существование, но есть различия в подходе.
Вариант 1:
Создание объекта PDO происходит внутри конструктора класса App. Это может быть удобно, если вы всегда хотите использовать одно и то тоже подключение к БД.Недостаток: снижается гибкость, так как нельзя передать уже существующее подключение.
Вариант 2:
Создание объекта PDO происходит внутри метода instance() класса DB, что позволяет использовать этот метод для создания различных соединений.Метод initDB() позволяет передать уже созданный объект PDO, что увеличивает гибкость.
Вариант 3:
Объект PDO создается в конструкторе класса DB. Это может быть удобно, если вы всегда хотите создавать объект PDO при создании экземпляра класса DB.Недостаток: конструктор класса DB не всегда должен создавать объект PDO (например, если вы хотите использовать разные настройки подключения).
Выбор зависит от конкретной ситуации и требований к приложению. Если вам нужна гибкость и возможность передавать различные объекты PDO, то лучше выбрать вариант 2. Если же вы заранее знаете, что всегда будете использовать одно и то же подключение, то вариант 1 подойдет лучше.
Все три варианта имеют право на существование, но есть различия в подходе.
Вариант 1:
Создание объекта PDO происходит внутри конструктора класса App. Это может быть удобно, если вы всегда хотите использовать одно и то тоже подключение к БД.Недостаток: снижается гибкость, так как нельзя передать уже существующее подключение.Вариант 2:
Создание объекта PDO происходит внутри метода instance() класса DB, что позволяет использовать этот метод для создания различных соединений.Метод initDB() позволяет передать уже созданный объект PDO, что увеличивает гибкость.Вариант 3:
Объект PDO создается в конструкторе класса DB. Это может быть удобно, если вы всегда хотите создавать объект PDO при создании экземпляра класса DB.Недостаток: конструктор класса DB не всегда должен создавать объект PDO (например, если вы хотите использовать разные настройки подключения).Выбор зависит от конкретной ситуации и требований к приложению. Если вам нужна гибкость и возможность передавать различные объекты PDO, то лучше выбрать вариант 2. Если же вы заранее знаете, что всегда будете использовать одно и то же подключение, то вариант 1 подойдет лучше.