对于数据库连接,我对单例模型和静态模型的工作原理感到困惑。我的朋友创建了一个“静态”类,并向我展示了它,但它对它是如何静态的没有任何意义。我有点理解如何创建数据库连接的单例方法,但我不确定它是否符合我的目标。
我想做的主要事情是减少到MYSQL的连接数量。我有一个类,它有一个函数,可以安静地频繁地调用数据库,并且每次有人请求需要数据库的东西时,它都没有理由建立新的连接。有没有人能提供一个小的示例类,用来连接到数据库并显示一个小的示例查询的单例或静态方法(无论哪种方法是正确的)?我将不胜感激。
哦,是的,我正在使用PHP 5.3 :)请随时询问更多细节。
发布于 2012-04-16 13:48:46
考虑下面的示例,它使用单例设计模式来访问数据库对象的实例(其目的是在整个应用程序中一次又一次地重用相同的连接)。
class Database {
protected static $_dbh;
const HOST = 'localhost';
const DATABASE = 'dbname';
const USERNAME = 'username';
const PASSWORD = 'password';
//declare the constructor as private to avoid direct instantiation.
private function __construct() { }
//access the database object through the getInstance method.
public static function getInstance() {
if(!isset($_dbh)) {
#Connection String.
self::$_dbh = new PDO('mysql:host='.self::HOST.';dbname='.self::DATABASE,self::USERNAME,self::PASSWORD);
self::$_dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$_dbh;
}
}现在,如果我必须在应用程序中的任何地方使用这个类,我会简单地这样做。
require_once('database.php');
$dbh = Database::getInstance();
$sth = $dbh->query('SELECT * FROM sometable');
$result = $sth->fetchAll(PDO::FETCH_ASSOC);对Database::getInstance();的调用使用静态方法。这基本上是通过将构造函数声明为private来限制您直接实例化对象,而不是检查对象是否已经实例化。如果为true,则返回已实例化的对象。否则创建新对象并返回新创建的对象。这确保了相同的数据库连接在整个应用程序中得到重用。
https://stackoverflow.com/questions/10169198
复制相似问题