我正在尝试为新的MongoDB驱动程序编写一个包装器来处理为旧驱动程序编写的代码。
在PHP中使用Mongo的旧方法是这样的:
$connection = new Mongo('mongodb://username:password@127.0.0.1/theDatabaseYouWantToConnectTo');
$db = $connection->theDatabaseYouWantToConnectTo;
$collection = $db->aCollectionYouWantToDoStuffWith;
$collection->insert(array(
'someColumnName' => 'someDataForTheCell'
));
我的问题是,这些部分如何运作?
$db = $connection->theDatabaseYouWantToConnectTo;
$collection = $db->aCollectionYouWantToDoStuffWith;
显然theDatabaseYouWantToConnectTo
和aCollectionYouWantToDoStuffWith
不是方法,那么我的包装类将如何理解它们是什么?
这是我正在尝试编写的包装类的骨架。
class Mongo{
var $native_mongo_instance;
function __construct($uri){
$native_mongo_instance = new MongoDB\Driver\Manager($uri);
$this->set_native_mongo_instance($native_mongo_instance);
}
public function set_native_mongo_instance($native_mongo_instance){
$this->native_mongo_instance = $native_mongo_instance;
}
public function get_native_mongo_instance(){
return $this->native_mongo_instance;
}
public function find(){
}
public function insert(){
}
public function remove(){
}
}
答案 0 :(得分:1)
在这里,您可以在PHP中找到full reference魔术方法。您正在寻找的是__get()
(传统驱动程序的here's C代码)。
另外,为了不重新发明轮子(或用于学习目的),您可以查看alcaeus/mongo-php-adapter,它在新的驱动程序和库上提供旧的API。