Předání připojovacího řetězce vašim třídám má spoustu nevýhod a žádné výhody. Jste na správné cestě, ale místo připojovacího řetězce chcete předat objekt databáze.
Dependency Injection je dobrý způsob, jak dát svým třídám přístup k databázi, což jednoduše znamená předávat závislosti (tj. databázový objekt) objektům, které je potřebují, než aby samotný objekt získával závislost z nějaké globální proměnné.
Navrhoval bych, abyste použili metodu jako setDb()
na vašich třídách, abyste předali databázové objekty a poté je uložili jako vlastnost pro jakékoli interní použití.
Například za předpokladu, že jste vytvořili databázový objekt $db
v inicializačním skriptu:
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 vám dává výhody, které jste zmínil:možnost snadno přepínat db, aniž byste museli dělat spoustu práce ve vašich metodách. Existují další výhody, konkrétně snadné testování.