L'obiettivo
A mio avviso, il tuo obiettivo in questo caso è duplice:
- creare e mantenere una connessione singola/riutilizzabile per database
- assicurati che la connessione sia stata impostata correttamente
Soluzione
Consiglierei di utilizzare sia la funzione anonima che il modello di fabbrica per gestire la connessione PDO. L'uso di esso sarebbe simile a questo:
$provider = function()
{
$instance = new PDO('mysql:......;charset=utf8', 'username', 'password');
$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
return $instance;
};
$factory = new StructureFactory( $provider );
Quindi in un file diverso o inferiore nello stesso file:
$something = $factory->create('Something');
$foobar = $factory->create('Foobar');
La fabbrica stessa dovrebbe assomigliare a questa:
class StructureFactory
{
protected $provider = null;
protected $connection = null;
public function __construct( callable $provider )
{
$this->provider = $provider;
}
public function create( $name)
{
if ( $this->connection === null )
{
$this->connection = call_user_func( $this->provider );
}
return new $name( $this->connection );
}
}
In questo modo si avrebbe una struttura centralizzata, che assicura che la connessione venga creata solo quando richiesto. Inoltre, semplificherebbe notevolmente il processo di unit test e manutenzione.
Il provider in questo caso verrebbe trovato da qualche parte nella fase di bootstrap. Questo approccio fornirebbe anche una posizione chiara in cui definire la configurazione, da utilizzare per la connessione al DB.
Tieni presente che questo è un esempio estremamente semplificato . Potresti anche trarre vantaggio dalla visione di due video seguenti:
Inoltre, consiglio vivamente di leggere un vero e proprio tutorial sull'uso di PDO (ci sono un registro di tutorial pessimi online).