0

我有一个生成数据库访问的“主类”。就像是:

class ObjetBd extends Objet
{
    protected $bd;
    public function __construct()
    {   
        parent::__construct();
        $this->bd = new BD();
        $this->bd->connect();
    }   
}

这对我来说是“干净”的代码(为了简洁起见,我删除了评论)。

现在我的问题是$this->bd为每个对象生成的。

我想知道静态对象是否生成+初始化一次。

我想调用一次并且只使用一个连接,而不使用直接调用静态方法(即像以前一样connect()继续使用)$this->bd

如果是这样,您能否说一下以下代码是否可以完美运行,以及是否应该使用更少的资源:

class ObjetBd extends Objet
{
    static private $bd_static;

    protected $bd;

    public function __construct()
    {   
        parent::__construct();
        if (!isset(self::$bd_static)) {
            self::$bd_static = new BD();
            self::$bd_static->connect();
        }
        $this->bd = self::$bd_static;
    }
}
4

1 回答 1

0

是的,你这样做是正确的。忽略单例注释,避免单例是一件好事。

虽然我确实想提一个建议:

我将假设 BD 是某种数据库。OOP 的强大之处在于能够对事物进行子类化,并在不改变行为的情况下替换对象。

所以最好只在构造函数中传递你的 $bd 对象。只是要记住的事情。这称为“依赖注入”或“控制反转”。

于 2012-04-25T14:27:12.223 回答