0

我正在构建一个 PHP 应用程序,它必须与几个结构相同的数据库进行交互。我想使用单例工厂来分发到数据库的连接并最大限度地减少重复连接的数量。我还想用一些函数来包装数据库类。

如果我可以在一个班级中完成所有这些,那将非常方便。我尝试使用单例工厂(当时这似乎是个好主意),只是意识到它似乎必须返回其他类才能有用。有没有一种简单的方法可以结合单例工厂和数据库包装功能,或者我应该将数据库包装功能放在另一个类中?

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

我经常做类似的事情(例如,按名称管理多个数据库连接)。我建议的一项更改是使构造函数和$instance数组受到保护。原因是这样测试变得更容易(因为您可以使用包装类对其进行扩展,以便能够访问它们并根据需要创建和销毁实例)。当然,这为某人在应用程序中执行此操作提供了可能性,但为什么要放弃从子类管理实例的可能性呢?

只是我的 0.02 美元...

于 2010-07-20T21:02:27.877 回答
0

看起来这可能通过使用一些类范围的状态变量并在构造函数中使用func_num_argsfunc_get_arg做一些聪明的事情来实现。

但是,为了减少每分钟 WTF 的数量,我将接受 GoalBased 的建议,将事情分成两个类别。

于 2010-07-21T14:11:28.590 回答