public function set($name, $value, $expire = null)
{
N('cache_write',1);
if(is_null($expire)) {
$expire = $this->options['expire'];
}
$name = $this->options['prefix'].$name;
if($this->handler->set($name, $value, time() + $expire)) {
if($this->options['length']>0) {
// 记录缓存队列
$this->queue($name);
}
return true;
}
return false;
}如果传入的$expire为空,本意是长期缓存,时间上set方法却将它设置为当前时间time()+$expire,也就是设置了值之后马上就过期,你会发现取到的值一直是false。另外构造函数将Memcached实例化过程写死,
$this->handler = new MemcachedResource;,这样一来就不能根据需要构建长连接了。题外话,tp所谓的CBD模式,其中的BD不少存在毛病,举个例子,B的BrowserCheckBehavior,主要是防刷新的,里面竟然是防止整个php文件的页面刷新,代码是这样:
$guid = md5($_SERVER['PHP_SELF']);,要知道,按照常规MVC构架,一个controller会有好几个方法,这样就会造成不能在短时间内访问同一个controller内的不同的方法(他们为不同的页面)。建议:既然作为一个框架,请开发者们尽量做好单元测试再提交,特别是作为核心库的Driver。要不然,让我们这些T粉反复琢磨发现问题后再上来提交bug就太浪费大家的时间了。比如我,大年初一的,为了这个问题琢磨了一个晚上。
总的来说,tp的构架思想还是很不错的,但是具体到某些问题上代码质量有待提高,最后祝大家新年快乐!
最佳答案