Cel
Jak widzę, twój cel w tym przypadku jest dwojaki:
- utwórz i utrzymuj jedno/wielokrotne połączenie na bazę danych
- upewnij się, że połączenie zostało prawidłowo skonfigurowane
Rozwiązanie
Do radzenia sobie z połączeniem PDO polecam używać zarówno funkcji anonimowej, jak i wzorca fabrycznego. Jego użycie wyglądałoby tak:
$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 );
Następnie w innym pliku lub niższym w tym samym pliku:
$something = $factory->create('Something');
$foobar = $factory->create('Foobar');
Sama fabryka powinna wyglądać mniej więcej tak:
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 );
}
}
W ten sposób uzyskasz scentralizowaną strukturę, która zapewnia, że połączenie jest tworzone tylko wtedy, gdy jest to wymagane. Ułatwiłoby to również proces testowania jednostkowego i konserwacji.
Dostawca w tym przypadku zostałby znaleziony gdzieś na etapie ładowania początkowego. Takie podejście dałoby również jasne miejsce, w którym można zdefiniować konfigurację, której używasz do łączenia się z bazą danych.
Pamiętaj, że jest to niezwykle uproszczony przykład . Możesz również skorzystać z obejrzenia dwóch następujących filmów:
Ponadto gorąco polecam przeczytanie odpowiedniego samouczka o korzystaniu z PDO (w Internecie jest dziennik złych samouczków).