PHP Memcache构造函数中的调用

PHP Memcache构造函数中的调用,php,oop,constructor,memcached,libmemcache,Php,Oop,Constructor,Memcached,Libmemcache,Im正在更新一些对象模型以将其数据缓存到memcache,如果找不到缓存键,则返回到常规的旧sql查询。最初,构造函数看起来是这样的,当然是简化了 function __construct($id){ $sql = 'SELECT name, place FROM Objs WHERE ObjID = ?'; $params = array($id); $data = Database::GetRow($sql, $params); $this->name

Im正在更新一些对象模型以将其数据缓存到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返回完整的对象。问题是,我不知道怎么做,因为构造函数不能分配
$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返回的objected“成为”构造函数接收的实例?或者我需要在一个先检查memcache的函数中为构造函数取别名吗

你应该把你的类解耦。您应该有用于数据表示的不同对象,用于从数据库查询结果构建第一个对象的不同对象,以及用于实现缓存机制的不同对象,以便您可以在不同的上下文中轻松地重用它们。试着看看一些ORM,例如条令2。试着为初学者阅读Miško Hevery的优秀文章:我想知道这行怎么不会抛出一些东西:$data=$Memcache->get('obj-'。$id);$Memcache在哪里初始化?