3

こんにちは、データベースに接続するためにこれを使用するコードがあります

$db= DAL::get_instance();           

$count=$db->read_single_column("select count(id) from ".TABLE_PREFIX."users where email=? and status=1", array($email));
 echo "Aqui".$count;

そのサイトの空白の新しいページを作成しましたが、機能し$db= DAL::get_instance();ていないと思います..データベースへの複数の接続を作成したくないので、PHPでDALを使用して、同じチェーンを使用して接続できます...

また、DAL はどこにどのように設定されていますか? (設定されている文字列を検索するにはどうすればよいですか、形式は何ですか)

ありがとう

ライブラリコアでDAL.phpを見つけました..しかし、それはIoncubeで暗号化されています..だから、どのように設定されているかを見ることができないと思います:(

4

1 に答える 1

2

クラスはユーザーランドで定義されています-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 接続も失われるため、追加のハウスキーピングが必要になります。
于 2013-05-26T14:48:58.797 に答える