1
我有這兩個代碼來連接到mongodb。理解兩個singleton Php代碼連接mongodb的問題
首先我使用這段代碼,但這似乎並沒有工作,我不知道爲什麼。
class DbConnection
{
static $db = NULL;
static function getMongoCon()
{
if (self::$db === null)
{
try {
$m = new Mongo("mongodb://username:[email protected]:27017");
} catch (MongoConnectionException $e) {
die('Failed to connect to MongoDB '.$e->getMessage());
}
self::$db = $m;
}
else
{
return self::$db;
}
}
}
在此之後我用這樣的方式在另一個類
$db=DbConnection::getMongoCon();
$database=$db->databasename;
$collection=$db->users;
連接蒙戈但這似乎並不總是工作。我總是得到錯誤$ db未定義或一些其他未定義的錯誤。
第二個代碼是這樣的。我用它連接到MongoDB而無需創建多個連接。這工作正常,沒有問題。
class DbConnection{
static protected $_instance;
protected $db = null;
final protected function __construct() {
$m = new Mongo("mongodb://username:[email protected]:27017");
$this->db = $m->selectDB("databasename");
}
static public function getInstance() {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}
public function getConnection() {
return $this->db;
}
final protected function __clone() { }
}
要在其他類使用此代碼我用
$db=DbConnection::getInstance()->getConnection();
$collection=$db->users;
我不知道爲什麼第二個工作,但不是第一個代碼。如果我在mysql中同時使用這兩個工作正常。 也可以這個問題比第二個代碼我已創建連接到Mongodatabase並保持打開並直接在另一個類中使用。
請描述爲什麼第二個代碼工作正常,並且第一次沒有工作。