目標
私が見ているように、この場合のあなたの目的は2つあります:
- データベースごとに単一の再利用可能な接続を作成して維持する
- 接続が正しく設定されていることを確認してください
解決策
PDO接続を処理するには、無名関数とファクトリパターンの両方を使用することをお勧めします。使用方法は次のようになります:
$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 );
次に、同じファイル内の別のファイルまたはそれ以下で:
$something = $factory->create('Something');
$foobar = $factory->create('Foobar');
工場自体は次のようになります:
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 );
}
}
このようにすると、一元化された構造になり、必要な場合にのみ接続が作成されるようになります。また、単体テストとメンテナンスのプロセスがはるかに簡単になります。
この場合のプロバイダーは、ブートストラップ段階のどこかにあります。このアプローチでは、DBへの接続に使用する構成を定義する場所も明確になります。
これは非常に単純化された例であることに注意してください 。また、次の2つのビデオを視聴することでメリットが得られる場合があります。
また、適切なチュートリアルを読むことを強くお勧めします PDOの使用について(オンラインで悪いチュートリアルのログがあります)。