您好我正在使用php而我正在尝试创建一个数据库类,其中构造函数将类连接到数据库并将指针指定给类变量。我遇到的问题是,每次创建类的新实例时,都会调用构造函数并将代码连接到数据库。我不明白为什么每次调用它都应该连接到数据库,那么我将如何在所有实例中创建一个相同的类变量,一旦给出指针,它就不会创建它试。
由于
答案 0 :(得分:2)
数据库连接不应该放在构造函数中。你应该有一个ConnectionFactory
类,它将连接数据库并返回一个新的DatabaseConnection
对象。
<?php
class ConnectionFactory {
public static function newConnection($credentials) {
//Connect to database
$connection = new PDO(/* Credentials */);
return $connection;
}
}
$connection = ConnectionFactory::newConnection(CREDENTIALS);
答案 1 :(得分:2)
您好有两种选择。
您最好的选择是创建singleton class。这是一个引用自身的类,因此您永远不能创建多个类。如果您尝试创建多个版本,它将返回当前初始化版本。
否则坚持使用你所拥有的东西,并确保你每次都不打电话给new
。
e.g。
$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这样的框架,他们使用自己的数据库类。值得看看它们是如何工作的。
答案 2 :(得分:0)
您应该创建一个单独的连接,并在类之间共享它,而不是为您创建的每个类建立新连接。
$connection = new PDO( ... );
$first = new Foo( $connection );
$second = new Bar( $connection );
这样两个实例都可以访问同一个连接。
观看此视频也可能会受益:The Clean Code Talks - Don't Look For Things!