0

私は、いくつかの構造的に同一のデータベースと相互作用する必要があるPHPアプリケーションを構築しています。シングルトンファクトリを使用してデータベースへの接続を配布し、重複する接続の数を最小限に抑えたいと思います。また、データベースクラスをいくつかの関数でラップしたいと思います。

これらすべてを1つのクラスで行うことができれば非常に便利です。シングルトンファクトリを使用してみましたが(当時は良いアイデアのようでした)、有用であるためには他のクラスを返さなければならないように思われることに気づきました。シングルトンファクトリとデータベースラッピング機能を組み合わせる簡単な方法はありますか、それともデータベースラッピング関数を別のクラスに配置する必要がありますか?

static private $instance = array();

private function __construct($name) {
    switch ($name) {
        //select db connection
    }

    $this->db = $this->getDb();
    return;
}

protected function __clone() {

}

public static function singleton($name) {
    if (!isset(self::$instance[$name])) {
        $c = __CLASS__;
        self::$instance[$name] = new $c($name);
    }
    return self::$instance[$name];
}

public function wrapperFunction() {
    //stuff
}
4

2 に答える 2

1

私はよく似たようなことをします(たとえば、名前で複数のデータベース接続を管理する)。私が提案する1つの変更は、コンストラクターと$instance配列を保護することです。その理由は、その方法でのテストがはるかに簡単になるためです(ラッパークラスを使用して拡張し、必要に応じてインスタンスにアクセスしてインスタンスを作成および破棄できるようにするため)。確かに、それは誰かがアプリケーションでそれを行う可能性を開きますが、なぜ子クラスからインスタンスを管理する可能性を捨てるのですか?

ちょうど私の0.02ドル...

于 2010-07-20T21:02:27.877 に答える
0

これは、クラス全体の状態変数を使用し、コンストラクターでfunc_num_argsfunc_get_argを使用して巧妙なことを行うことでおそらく可能になるようです。

ただし、1分あたりのWTFの数を減らすために、GoalBasedの提案で物事を2つのクラスに分割します。

于 2010-07-21T14:11:28.590 に答える