Mah qui il discorso è semplicemente per specificare la scelta del driver e parametri di connessione per la classe PDO, non tanto l'uso della classe in se. La differenza sostanziale tra singleton e DI è se scegliere una struttura del tipo:

Codice PHP:

class MyModel{

private 
$pdo null;
public function 
__construct(){
$this->pdo MyFactory::getPDO(); //ritorna singleton pdo
}

}


//nella pratica
$model = new MyModel();
print_r($model->findAll()); 
mentre in DI

Codice PHP:

class MyModel{

private 
$pdo;
public function 
__construct($myPdoClass){
$this->pdo $myPdoClass;
}

}


$model MyContainer::getModel('MyModel'); //MyContainer::getModel istanzia
//un oggetto MyModel e nel costruttore gli passa una reference al pdo di turno 
dove, come vedi, nel primo caso MyModel dipende fortemente da MyFactory, nel secondo caso invece MyModel è libero da dipendenze esterne e ci pensa MyContainer ad istanziare MyModel e a passargli la referenza al pdo di turno