你好我正在使用php,我试图做一个数据库类,其中构造函数将类连接到数据库并将指针指派给类变量。我遇到的问题是,每次创建类的新实例时,都会调用构造函数,并将代码连接到数据库。我不明白为什么每次调用数据库时都要连接数据库,所以我怎么去做一个类变量,它在所有的实例中都是一样的,一旦它被赋予了指针,它就不会创建它再次。php创建一个类变量
感谢
你好我正在使用php,我试图做一个数据库类,其中构造函数将类连接到数据库并将指针指派给类变量。我遇到的问题是,每次创建类的新实例时,都会调用构造函数,并将代码连接到数据库。我不明白为什么每次调用数据库时都要连接数据库,所以我怎么去做一个类变量,它在所有的实例中都是一样的,一旦它被赋予了指针,它就不会创建它再次。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 class。这是一个引用它自己的类,所以你永远不能创建它多于一个。如果您尝试创建多个它,它将返回其本身的当前初始版本。
否则坚持你拥有的东西,只要确保你没有每次都打电话给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("...");
但是这可能会比较混乱,而且你可能会失去变量的范围,所以我建议用单方法去。有些人会告诉你不要使用单身人士,而是由你决定。适用于数据库类。
如果你在互联网上浏览,你会发现其他数据库类的例子来看看。
看看像codeigniter这样的框架,他们也使用自己的数据库类。可能值得看看他们是如何工作的。
单身是邪恶的。如果他确实需要连接多次(到不同的数据库,具有不同的凭证)? – 2012-03-03 11:01:48
我听说单身人士是邪恶的,但我从来没有遇到任何问题。在iOS编程之后(目标c),我发现单例是非常有用的。您可以使用多个连接创建单身人士。创建一个静态变量来保存每个连接。无论如何,它是帮助OP的答案。 – 2012-03-03 18:21:59
您应该创建一个单独的连接,并在类之间共享,而不是为每个创建的类创建新的连接。
$connection = new PDO(...);
$first = new Foo($connection);
$second = new Bar($connection);
这样,两个实例都可以访问相同的连接。
您也可以观看这部视频中获益:The Clean Code Talks - Don't Look For Things!
您可能需要阅读这个问题和接受的答案:http://stackoverflow.com/questions/9227400/php-singleton-database-connection-is-这个代码坏习惯 – summea 2012-03-02 21:51:07
我同意summea,我个人觉得依赖注入方式比单例更容易实现。 – Kisaro 2012-03-02 21:57:35