Passare una stringa di connessione alle tue classi ha molti svantaggi e nessun vantaggio. Sei sulla strada giusta, ma vuoi passare l'oggetto database invece di una stringa di connessione.
L'inserimento delle dipendenze è un buon modo per dare alle classi l'accesso al database, il che significa semplicemente passare le dipendenze (cioè l'oggetto del database) agli oggetti che ne hanno bisogno, piuttosto che l'oggetto stesso ottenere la dipendenza da una variabile globale di qualche tipo.
Ti suggerirei di usare un metodo come setDb()
sulle tue classi per passare gli oggetti del database e quindi archiviarlo come proprietà per qualsiasi uso interno.
Ad esempio, supponendo che tu abbia creato l'oggetto database $db
in uno script di inizializzazione:
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 ti dà i vantaggi che hai menzionato:la possibilità di cambiare facilmente il db senza dover fare molto lavoro nei tuoi metodi. Ci sono altri vantaggi, vale a dire la facilità di test.