【发布时间】:2011-02-10 18:11:12
【问题描述】:
我正在尝试学习 PHP OOP,并研究了如何制作一个全局数据库类以在我的项目中使用。从我所见,最合适的可用模式是单例,它可以确保始终只存在一个数据库连接。然而,由于这是我第一次使用单例模式,我不确定我是否做对了。
这是一个合适的单身人士吗?此代码是否仅确保一个数据库连接?有什么办法可以测试吗? (学会一个人钓鱼,他的余生都会有食物......)
我使用 redbean 作为我的 ORM,我是这样设置的:
require_once PLUGINPATH.'rb.php';
$redbean= R::setup("mysql:host=192.168.1.1;dbname=myDatabase",'username','password');
我根据this source 制作了以下脚本,作为我自己的单例数据库类;
class database {
private $connection = null;
private function __construct(){
require_once PLUGINPATH.'rb.php';
$this->connection = R::setup("mysql:host=192.168.1.1;dbname=myDatabase",'username','password');
}
public static function get() {
static $db = null;
if ( $db === null )
$db = new database();
return $db;
}
public function connection() {
return $this->connection;
}
}
谢谢!
【问题讨论】:
-
学会一个人搜索等等;)Creating the Singleton design pattern in PHP5的可能重复
-
嗨 - 我认为自己是一个体面的 Google 员工,但由于我在 Singletons 上找不到任何东西,在这种情况下如何共享 redbean 提供的
Static连接,我不是确定要做什么,并期待一些帮助:) -
只是一个花絮:对于单身人士/工厂来说,
new self()是一个有趣的简写,它使以后更容易更改类名,应该需要它。这是一个几乎可以忽略不计的好处,但我发现至少值得了解这个选项。 -
@pinkgothic:Beware when using the
selfkeyword and inheritance。您可能会大吃一惊。 -
@netcoder:我个人认为这并不奇怪。如果您的示例返回了 SuperSingleton,那会让我感到惊讶! :) 它的工作方式就是它应该如何工作。 (当然,这是一种观点,事实上 PHP 引入了后期静态绑定作为 PHP 处理静态方面的替代方法,这很好地表明了其他人不同意我的观点。)
标签: php oop design-patterns singleton