PHP Memcache在构造函数中调用

时间:2011-06-16 15:29:49

标签: php oop constructor memcached libmemcache

我正在更新一些对象模型以将其数据缓存到memcache,然后在没有找到缓存键的情况下回退到常规的旧sql查询。最初,构造函数看起来像这样,当然是简化了。

function __construct($id){
    $sql = 'SELECT name, place FROM Objs WHERE ObjID = ?';
    $params = array($id);
    $data = Database::GetRow($sql, $params);

    $this->name = $data['name'];
    $this->place = $data['place'];
}

我修改过这样的内容:

function __construct($id){
    $data = $Memcache->get('obj-'.$id);
    if(empty($data)){
        $sql = 'SELECT name, place FROM Objs WHERE ObjID = ?';
        $params = array($id);
        $data = Database::GetRow($sql, $params);
        $Memcache->set('obj-'.$id, $data, false, 350);
    }

    $this->name = $data['name'];
    $this->place = $data['place'];
}

这一切都很好,但许多对象都有其他私有方法来执行其他查询并设置更多属性。我希望能够做的是从memcached返回完整的对象,设置AFTER属性。问题是,我不知道如何做到这一点,因为构造函数无法分配$this关键字。

function __construct($id){
    $data = $Memcache->get('obj-'.$id);
    if(empty($data)){
        $sql = 'SELECT name, place FROM Objs WHERE ObjID = ?';
        $params = array($id);
        $data = Database::GetRow($sql, $params);
        $this->name = $data['name'];
        $this->place = $data['place'];
        $Memcache->set('obj-'.$id, $data, false, 350);
    }else{
        //this is definitely not right, though semantically it kinda defines what I want to accomplish
        $this = $data
    }
}

无论如何都要将这个逻辑保留在构造函数中,并以某种方式优雅地让从memcached返回的对象“成为”构造函数接收的实例?或者我是否需要在首先检查memcache的函数中为构造函数设置别名?

0 个答案:

没有答案