我知道单身汉不好。但这也不好吗?
class DaoMySQL {
private static $instance;
private $PDO;
private function __construct() {
$this->PDO = new PDO('mysql:dbname='.MYSQL_DEFAULT_DATABASE.';host='.MYSQL_HOSTNAME, MYSQL_USERNAME, MYSQL_PASSWORD);
$this->PDO->query('SET NAMES \'utf8\'');
}
/**
* @return DaoMySQL
*/
static public function singleton() {
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c();
}
return self::$instance;
}
/**
* @return PDO
*/
public function getPDO() {
return $this->PDO;
}
}
为了使用这个,我做了这样的事情。(这是来自所有数据对象扩展的bean类。)
public function delete() {
$calledClassName = get_called_class();
$query = "DELETE FROM `" . $calledClassName::table . "` WHERE `id` = $this->id";
return DaoMySQL::singleton()->getPDO()->exec($query);
}
最佳答案
许多人开始使用依赖注入容器来管理他们的对象,而不是使用单例。也许值得一看?那么您只需要确保对象可以访问容器。你可以从那里拿其他的东西。
我个人使用symfony组件中的sfServiceContainer。这是一个独立的di容器,现在似乎很流行。
更新
不需要使用框架或库。fabien potensier的articles on dependency injection应该能让您充分掌握di,从而实现自己的di。但为什么要重新发明轮子呢?不使用一个好的,现有的库闻起来有NIH的味道。
注意,除了我使用的sfservicecontainer之外,还有许多其他的di库。还要注意,sfservicecontainer是一个完全独立的库。它不需要symfony或任何其他框架。它只需要简单的旧php。
关于php - PHP:将数据库层实现为单例可接受吗?代码里面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5036391/