php创建一个类变量


php creating a class variable

你好,我正在使用php,我正在尝试创建一个数据库类,构造函数将该类连接到数据库,并将指针分配给类变量。我遇到的问题是,每次创建类的新实例时,都会调用构造函数,并且代码会连接到数据库。我不明白为什么每次调用它时都要连接到数据库,那么我该如何创建一个在所有实例中都相同的类变量,一旦给了它指针,它就不会再创建它了。

感谢

数据库连接不应该进入构造函数。您应该有一个ConnectionFactory类,它将连接数据库并返回一个新的DatabaseConnection对象。

<?php
class ConnectionFactory {
    public static function newConnection($credentials) {
        //Connect to database
        $connection = new PDO(/* Credentials */);
        return $connection;
    }
}
$connection = ConnectionFactory::newConnection(CREDENTIALS);

嗨,您有两个选项。

最好的办法是创建一个singleton类。这是一个引用自身的类,因此您永远不能创建多个。如果您尝试创建多个,它将返回当前初始化的自身版本。

否则,坚持你所拥有的,并确保你不会每次都打电话给new

例如

$db = new Database(); // call this once to create
// don't do this again
$anotherdb = new Database();
// just use the db object from before
$db->query("...");

然而,这可能会让人感到困惑,并且您可能会失去变量的作用域,所以我建议使用singleton方法。有些人会告诉你不要使用singleton,但这取决于你。与数据库类配合良好。

如果你在互联网上环顾四周,你会发现其他数据库类的例子。

看看像codeigniter这样的框架,它们使用自己的数据库类。也许值得一看它们是如何工作的。

与其为创建的每个类建立新的连接,不如创建一个连接并在类之间共享。

$connection = new PDO( ... );
$first = new Foo( $connection );
$second = new Bar( $connection );

通过这种方式,两个实例都可以访问同一个连接。

你也可能从观看这段视频中受益:清洁代码对话-不要找东西!