Przekazywanie parametrów połączenia do klas ma wiele wad i nie ma żadnych korzyści. Jesteś na dobrej drodze, ale chcesz przekazać obiekt bazy danych zamiast ciągu połączenia.
Wstrzykiwanie zależności to dobry sposób na umożliwienie klasom dostępu do bazy danych, co oznacza po prostu przekazanie zależności (tj. obiektu bazy danych) do obiektów, które ich potrzebują, zamiast uzyskiwania zależności przez sam obiekt z jakiejś zmiennej globalnej.
Sugerowałbym użycie metody takiej jak setDb()
na swoich klasach, aby przekazać obiekty bazy danych, a następnie przechowywać je jako właściwość do użytku wewnętrznego.
Na przykład zakładając, że utworzyłeś obiekt bazy danych $db
w skrypcie inicjującym:
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 daje korzyści, o których wspomniałeś:możliwość łatwego przełączania bazy danych bez konieczności wykonywania dużej ilości pracy w swoich metodach. Są też inne korzyści, a mianowicie łatwość testowania.