【发布时间】:2012-03-02 21:35:48
【问题描述】:
我正在尝试创建一个简单的使用单例类来连接到 mysql 数据库并进行查询,代码工作正常,我没有遇到任何问题,但是由于我是 OOP 新手想知道这是否是不好的做法。
这是课程
class Database {
private $databaseName = 'dbname';
private $host = 'localhost';
private $user = 'user';
private $password = 'pass';
private static $instance; //store the single instance of the database
private function __construct(){
//This will load only once regardless of how many times the class is called
$connection = mysql_connect($this->host, $this->user, $this->password) or die (mysql_error());
$db = mysql_select_db($this->databaseName, $connection) or die(mysql_error());
echo 'DB initiated<br>';
}
//this function makes sure there's only 1 instance of the Database class
public static function getInstance(){
if(!self::$instance){
self::$instance = new Database();
}
return self::$instance;
}
public function connect() {
//db connection
}
public function query($query) {
//queries
$sql = mysql_query($query) or die(mysql_error());
return $sql;
}
public function numrows($query) {
//count number of rows
$sql = $this->query($query);
return mysql_num_rows($sql);
}
}
//Intantiate the class
$database = Database::getInstance();
当我想使用该课程时,我会这样做:
$query = "SELECT * FROM registrations";
echo $database->numrows($query);
$sql = $database->query($query);
【问题讨论】:
-
单例模式通常在数据库类、记录器、前端控制器或请求和响应对象中实现。
-
我看不出有什么问题
-
您可以查看大量的 db 类。甚至查看诸如 codeigniter 之类的框架,看看它们的 db 类是如何工作的。
-
Who needs singletons? 的可能重复项
-
@diEcho 确实在stackoverflow.com/a/4596323/208809 中进行了解释,并在其中给出了链接。你特别提到的那些可以很容易被butunclebob.com/ArticleS.UncleBob.SingletonVsJustCreateOne处理
标签: php mysql oop class singleton