Målet
Som jeg ser det, er dit mål i dette tilfælde todelt:
- opret og vedligehold en enkelt/genanvendelig forbindelse pr. database
- sørg for, at forbindelsen er konfigureret korrekt
Løsning
Jeg vil anbefale at bruge både anonym funktion og fabriksmønster til at håndtere PDO-forbindelse. Brugen af det ville se sådan ud :
$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 );
Derefter i en anden fil eller lavere i samme fil:
$something = $factory->create('Something');
$foobar = $factory->create('Foobar');
Selve fabrikken skulle se nogenlunde sådan ud:
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 );
}
}
På denne måde vil du have en centraliseret struktur, som sikrer, at forbindelsen kun oprettes, når det er nødvendigt. Det ville også gøre processen med enhedstest og vedligeholdelse meget nemmere.
Udbyderen i dette tilfælde ville blive fundet et sted på bootstrap-stadiet. Denne tilgang vil også give en klar placering, hvor du skal definere den konfiguration, du bruger til at oprette forbindelse til DB.
Husk, at dette er et ekstremt forenklet eksempel . Du kan også drage fordel af at se to følgende videoer:
Jeg vil også stærkt anbefale at læse en ordentlig vejledning om brug af PDO (der er en log over dårlige vejledninger online).