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

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

Вариант 1:

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

Вариант 2:

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

Вариант 3:

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

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

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