如何解决在构造函数中调用PHP 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,$params);
$this->name = $data[\'name\'];
$this->place = $data[\'place\'];
$Memcache->set(\'obj-\'.$id,350);
}else{
//this is definitely not right,though semantically it kinda defines what I want to accomplish
$this = $data
}
}
无论如何要在构造函数中保留此逻辑,并以某种方式优雅地使对象从memcached返回的“成为”构造函数所接收的实例?还是我需要在首先检查内存缓存的函数中为构造函数添加别名?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。