Как передать объект БД в класс? Мужики, запутался. Есть базовый класс 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);

21 Авг 2019 в 06:59
176 +1
0
Ответы
1

Все три варианта имеют право на существование, но есть различия в подходе.

Вариант 1:

Создание объекта PDO происходит внутри конструктора класса App. Это может быть удобно, если вы всегда хотите использовать одно и то тоже подключение к БД.Недостаток: снижается гибкость, так как нельзя передать уже существующее подключение.

Вариант 2:

Создание объекта PDO происходит внутри метода instance() класса DB, что позволяет использовать этот метод для создания различных соединений.Метод initDB() позволяет передать уже созданный объект PDO, что увеличивает гибкость.

Вариант 3:

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

Выбор зависит от конкретной ситуации и требований к приложению. Если вам нужна гибкость и возможность передавать различные объекты PDO, то лучше выбрать вариант 2. Если же вы заранее знаете, что всегда будете использовать одно и то же подключение, то вариант 1 подойдет лучше.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир