2011-07-10 17 views
0

これは大変です。私はここで私を助けるためにStack Overflowで賢明な人たちに質問しました。PHPシングルトンデータベースの制限

1つのインスタンスを返すためにデータベース接続を作成する必要がある場合は、シングルトンパターンを使用する必要があります。これはすべてうまくいいですが、これでは1つの接続だけに制限されませんか?シングルはオブジェクトの単一のインスタンスのみを返します。

私は、コンストラクタがユーザによって指定されたパラメータに基づいて接続を作成したか、設定ファイルで接続を作成した後、ユーザが2番目の接続を作成したいというクラスコンスラクタの単一のインスタンスを返すメソッドを持っていたとしますシングルトンは元の接続を返すだけではなく、複数のデータベース接続の作成を制限しますか?

+1

あなたはこのセーガアドバイスをどこで読んだのですか? –

答えて

0

Iを含む様々な方法で実装を見ることができます:

1)シングルトンがデータベースAに接続し、データベースBへの接続

2を含む別のメンバ変数を含む会員データに保持)同#1と同じですが、各データベースへの接続プールが必要なので、接続を含む2つの配列を保持するとします。もちろん、これらはすべて一度に接続できますが、それらを接続するのが面倒ですが、この配列を維持することができます(接続の最大数まで)。

+0

ええと、#1では2つのメンバーがあり、getInstanceメソッドは一般的に両方のインスタンスを返しますか? –

+0

でも、実際にはシングルトンのインスタンスを1つ返すだけで、そのシングルトンにはgetConnectionA()やgetConnectionB()などが含まれています。複数のことが起こっている場合は、ConnectionAを使用しているプロセス/スレッド/ユーザーが1つだけであることを確認する必要があります。ブロックする(待ちます)か、接続プールを持つ可能性が高くなります。したがって、シングルトンからgetConnectionA()を呼び出すと、プールからの有効な接続が返されます。使用後に接続がプールに戻ってきたことを確認し、最大値に達することはありません。 –

+0

私は、本質的に、異なるデータベースへの接続用に設計された2つの方法があることを確認します。または私はあなたのコンセプトを完全に誤解していますか? –

0

Singletonパターンを使用して、Connectionsクラスを作成できます。このクラスが管理する接続の数は、1つの接続を維持するか、またはオブジェクトプール型のパターンを使用して接続プールを管理することができます。