Как подключиться к MongoDB из другого класса PHP? - PullRequest
4 голосов
/ 03 апреля 2012

У меня есть следующий код для подключения к MongoDB:

try {
   $m = new Mongo('mongodb://'.$MONGO['servers'][$i]['mongo_host'].':'.$MONGO['servers'][$i]['mongo_port']);

 } catch (MongoConnectionException $e) {
   die('Failed to connect to MongoDB '.$e->getMessage());
 }

// select a database
$db = $m->selectDB($MONGO["servers"][$i]["mongo_db"]);

Затем я создал класс PHP, где я хочу получать / обновлять данные в Mongo.Я не знаю, как получить доступ к подключению к Mongo, созданному ранее.

class Shop {
var $id;

public function __construct($id) {
    $this->id = $id;        
    $this->info = $this->returnShopInfo($id);
    $this->is_live = $this->info['is_live'];
}
//returns shop information from the database
public function returnShopInfo () {
    $where = array('_id' => $this->id);
    return $db->shops->findOne($where);
}
}

А код выглядит примерно так:

$shop = new Shop($id);
print_r ($shop->info());

Ответы [ 2 ]

10 голосов
/ 03 апреля 2012

Вы можете просто использовать «new Mongo ()» с той же строкой соединения, и она будет использовать то же соединение, но я предлагаю вам обернуть один класс вокруг класса соединения Mongo, чтобы получить тот же объект соединения.Вероятно, что-то вроде:

<?php
class myprojMongoSingleton
{
    static $db = NULL;

    static function getMongoCon()
    {
        if (self::$db === null)
        {
            try {
                $m = new Mongo('mongodb://'.$MONGO['servers'][$i]['mongo_host'].':'.$MONGO['servers'][$i]['mongo_port']);

            } catch (MongoConnectionException $e) {
                die('Failed to connect to MongoDB '.$e->getMessage());
            }
            self::$db = $m;
        }

        return self::$db;
    }
}

И затем вызовите его где-нибудь еще в вашем приложении с помощью:

$m = myprojMongoSingleton::getMongoCon();
0 голосов
/ 03 апреля 2012

Переместите соединение в класс вашего магазина и вместо того, чтобы установить его на $m, используйте $this->m или эквивалентный, чтобы у вас всегда была ссылка на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...