クラスはユーザーランドで定義されています-PHPDAL
にはそのようなものはありません。そのコード全体をどこかに投稿すると、誰かがそれをどうするか教えてくれるかもしれません。
ただし、あなたが言ったことに基づいてジェネリックを提供します。static::get_instance()
そして、それの複数のインスタンスを起動できないという言及は、データベース抽象化レイヤーが実際にはSingletonであることを示唆しています。これは良いことですが、これは非常に悪いことです。シングルトンの全体的な目的は、クラスを 1 つのインスタンスのみに制限することです。これは、データベース層にとって非常に優れています。
ただし、あなたの場合、同時に複数のDBに接続したいようです。コードのコーディング方法によっては、コードをほとんどまたはまったく変更せずにこれを実行できる場合があります。
参考までに、これは DAL の簡易バージョンです: http://codepad.viper-7.com/gPQ8bo。私はあなたが懸念しているビットを保持し、他のすべてを取り除きました.
明白な方法
シングルトンをリッピングして、依存性注入の使用を開始します。
あまり目立たない方法
Reflection
シングルトンのプライベート静的メンバーをリセットするために使用できます。これはハックなので、必要な場合にのみ使用してください。
これに対するフィドルはここにあります:http://codepad.viper-7.com/ja6zHL。コードは次のとおりです。
$reflection = new \ReflectionProperty('MySingleton', 'instance'); // Get a handle to the private self::$instance property
$reflection->setAccessible(true); // Set it to public
$reflection->setValue(null, null); // Modify it
// Optional: re-restrict it
$reflection->setAccessible(false);
これは 3 つの理由からハックであることに注意してください。
- これを行うべきではありません。代わりに、実際に複数の接続を起動したり、自分で作成したりできる DAL の使用を検討する必要があります。
- これは
Reflection
、パフォーマンスにかなり大きな影響を与える を使用します
- これはハックです。最初の DB 接続も失われるため、追加のハウスキーピングが必要になります。