私はmongodbに接続するために使用するこれらの2つのコードを持っています。
最初にこのコードを使用しましたが、これは機能していないようです。理由はわかりません。
class DbConnection
{
static $db = NULL;
static function getMongoCon()
{
if (self::$db === null)
{
try {
$m = new Mongo("mongodb://username:password@localhost:27017");
} catch (MongoConnectionException $e) {
die('Failed to connect to MongoDB '.$e->getMessage());
}
self::$db = $m;
}
else
{
return self::$db;
}
}
}
この後、私はこの方法を使用して別のクラスのmongoを接続しました
$db=DbConnection::getMongoCon();
$database=$db->databasename;
$collection=$db->users;
しかし、これは常に機能するとは限りません。$dbが定義されていないエラーまたはその他の未定義のエラーが常に発生します。
2番目のコードはこれです。複数の接続を作成せずにmongodbに接続するために使用しました。これは問題なく正常に動作します。
class DbConnection{
static protected $_instance;
protected $db = null;
final protected function __construct() {
$m = new Mongo("mongodb://username:password@localhost: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;
なぜ2番目のコードが機能したのかわかりませんが、最初のコードは機能しませんでした。mysqlで両方を使用すると、両方とも正常に機能します。また、これは、mongodatabaseへの接続を作成し、それを開いたままにして別のクラスで直接使用する2番目のコードよりも問題になる可能性があります。
2番目のコードが正常に機能し、最初のコードが機能しなかった理由を簡単に説明してください。