动态生成不存在的方法?

时间:2016-05-05 20:22:28

标签: php mongodb

我正在尝试为新的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;

显然theDatabaseYouWantToConnectToaCollectionYouWantToDoStuffWith不是方法,那么我的包装类将如何理解它们是什么?

这是我正在尝试编写的包装类的骨架。

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(){


    }
}

1 个答案:

答案 0 :(得分:1)

在这里,您可以在PHP中找到full reference魔术方法。您正在寻找的是__get()(传统驱动程序的here's C代码)。

另外,为了不重新发明轮子(或用于学习目的),您可以查看alcaeus/mongo-php-adapter,它在新的驱动程序和库上提供旧的API。