Passar uma string de conexão para suas classes tem muitas desvantagens e nenhum benefício. Você está no caminho certo, mas deseja passar o objeto de banco de dados em vez de uma string de conexão.
A injeção de dependência é uma boa maneira de dar acesso às suas classes ao banco de dados, o que significa simplesmente passar dependências (isto é, objeto de banco de dados) para os objetos que precisam delas, em vez do próprio objeto obter a dependência de uma variável global de algum tipo.
Eu sugiro que você use um método como
setDb()
em suas classes para passar os objetos de banco de dados e, em seguida, armazená-lo como uma propriedade para qualquer uso interno. Por exemplo, supondo que você tenha criado o objeto de banco de dados
$db
em um script de inicialização: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();
O DI oferece os benefícios que você mencionou:a capacidade de alternar facilmente o banco de dados sem ter que fazer muito trabalho em seus métodos. Existem outros benefícios, nomeadamente a facilidade de teste.