#php #oop #mongodb
#php #ооп #mongodb
Вопрос:
Отличный 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. В нем используются различные из следующих: php.net/manual/en/language.oop5.magic.php
2. Хорошая ссылка, я не знал о многих из них. Спасибо!
Ответ №1:
Вы можете использовать класс, подобный этому, для достижения того же:
class mongolike {
protected $dbs;
function __get($name) {
if (empty($this->dbs[$name])) {
$this->dbs[$name] = new db($name);
}
return $this->dbs[$name]
}
}
Комментарии:
1. Приятно, спасибо! Я не знал о многих из этих волшебных функций, всегда нужно изучать что-то новое.