Предаването на низ за връзка към вашите класове има много недостатъци и никакви предимства. Вие сте на прав път, но искате да предадете обекта на базата данни вместо низ за връзка.
Инжектирането на зависимости е добър начин да дадете на вашите класове достъп до базата данни, което просто означава да прехвърлите зависимости (т.е. обект на база данни) към обектите, които се нуждаят от тях, вместо самият обект да получава зависимостта от някакъв вид глобална променлива.
Предлагам ви да използвате метод като setDb()
на вашите класове, за да предадете обектите на базата данни и след това да го съхраните като свойство за всяка вътрешна употреба.
Например, ако приемем, че сте създали обекта на базата данни $db
в скрипт за инициализация:
class SomeClass
{
protected $db;
public function setDb($db)
{
$this->db = $db;
}
public function something()
{
// do some query on the database using $this->db
}
}
$obj = new SomeClass();
$obj->setDb($db);
$obj->something();
DI ви дава предимствата, които споменахте:възможността лесно да превключвате db, без да се налага да вършите много работа във вашите методи. Има и други предимства, а именно лекота на тестване.