Het doel
Zoals ik het zie, is je doel in dit geval tweeledig:
- een enkele/herbruikbare verbinding per database maken en onderhouden
- zorg ervoor dat de verbinding correct is ingesteld
Oplossing
Ik zou aanraden om zowel de anonieme functie als het fabriekspatroon te gebruiken voor het omgaan met PDO-verbindingen. Het gebruik ervan ziet er als volgt uit:
$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 );
Dan in een ander bestand of lager in hetzelfde bestand:
$something = $factory->create('Something');
$foobar = $factory->create('Foobar');
De fabriek zelf zou er ongeveer zo uit moeten zien:
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 );
}
}
Op deze manier zou je een gecentraliseerde structuur hebben, die ervoor zorgt dat er alleen verbinding wordt gemaakt als dat nodig is. Het zou ook het proces van unit-testing en onderhoud veel gemakkelijker maken.
De provider zou in dit geval ergens in de bootstrap-fase te vinden zijn. Deze benadering zou ook een duidelijke locatie geven waar u de configuratie kunt definiëren, die u gebruikt om verbinding te maken met de database.
Houd er rekening mee dat dit een uiterst vereenvoudigd voorbeeld is . U kunt ook profiteren van het bekijken van twee volgende video's:
Ik zou ook sterk aanbevelen om een goede tutorial over het gebruik van PDO (er zijn een logboek met slechte tutorials online).