Cíl
Jak vidím, váš cíl je v tomto případě dvojí:
- vytvořit a udržovat jedno/opakovaně použitelné připojení pro každou databázi
- ujistěte se, že bylo připojení správně nastaveno
Řešení
Pro řešení připojení PDO bych doporučil použít jak anonymní funkci, tak tovární vzor. Jeho použití by vypadalo takto:
$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 );
Potom v jiném souboru nebo níže ve stejném souboru:
$something = $factory->create('Something');
$foobar = $factory->create('Foobar');
Samotná továrna by měla vypadat nějak takto:
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 );
}
}
Tímto způsobem byste měli mít centralizovanou strukturu, která zajišťuje, že připojení je vytvořeno pouze v případě potřeby. Také by to značně usnadnilo proces testování a údržby jednotky.
Poskytovatel by se v tomto případě našel někde ve fázi bootstrapu. Tento přístup by také poskytl jasné místo, kde definovat konfiguraci, kterou používáte pro připojení k DB.
Pamatujte, že toto je extrémně zjednodušený příklad . Můžete také využít sledování dvou následujících videí:
Také bych důrazně doporučil přečíst si správný návod o používání PDO (online je protokol špatných výukových programů).