Как мне воспроизвести парадигму API MongoDB? - PullRequest
1 голос
/ 13 ноября 2011

Отличный PHP-драйвер MongoDB позволяет мне писать для написания PHP-кода, который выглядит следующим образом:

$mongo = new mongo("mongodb://path.to.my.server.com:27017");
$cnt = $mongo->db_name->table->count();

Более того, я также могу написать аналогичный код для несуществующих таблиц:

$mongo->new_db_name->table->save(array('name' => 'Jimmy'));
echo $mongo->new_db_name->table->count();

Класс Mongo является родительским объектом, созданным конструктором Mongo(), и, похоже, он создает на лету дочерние переменные MongoCollection (db_name и new_db_name соответственно), какнеобходимо.Как драйвер Mongo делает это?Как он узнает о создании объекта типа MongoCollection, если открытая переменная не найдена?Драйвер является расширением PECL C;это необходимо для репликации этого поведения, или кто-то может сделать что-то подобное в PHP?

1 Ответ

2 голосов
/ 13 ноября 2011

Вы можете использовать такой класс, чтобы достичь того же:

class mongolike {
  protected $dbs;
  function __get($name) {
    if (empty($this->dbs[$name])) {
      $this->dbs[$name] = new db($name);
    }
    return $this->dbs[$name]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...