本来想简化 ThinkSNS 系统里面的一个缓存管理函数:

<?php
/**
* 用来对应用缓存信息的读、写、删除
* $expire = null/0 表示永久缓存,否则为缓存有效期
*/
function S($name, $value = '', $expire = null)
{
static $_cache = array(); //减少缓存读取
$cache = model('Cache');
//$name = C('DATA_CACHE_PREFIX').$name; if ('' !== $value)
{
if (is_null($value))
{
// 删除缓存
$result = $cache->rm($name);
if ($result)
{
unset($_cache[$name]);
} return $result;
}
else
{
// 缓存数据
$cache->set($name, $value, $expire);
$_cache[$name] = $value;
} return true;
} if (isset($_cache[$name]))
{
return $_cache[$name];
} // 获取缓存数据
$value = $cache->get($name);
$_cache[$name] = $value; return $value;
}

简化如下:

/**
* 内存缓存
*
* @param string $name 缓存键
* @param string $value 缓存值(为''时,表示获取; 为null表示删除)
* @param mixed $expire = null/0 表示永久缓存,否则为缓存有效期
*/
function S($name, $value = '', $expire = null)
{
$cache = model('Cache'); if ($value == '') // 获取缓存
{
return $cache->get($name);
}
elseif (is_null($value)) // 删除缓存
{
return $cache->rm($name);
}
else
{
return $cache->set($name, $value, $expire);
}
}

结果呢,留下了一个大bug,想通过 S('键名', null); 来删除某个缓存,死活不成功!

通过跟踪,原来 当 $value = null 时,if ($value == '') 匹配成功,弱类型转换,即 null == '',所以需要把“等号”改为“恒等号”。即,把 if ($value == '') 改为 if ($value === ''),问题解决。

/**
* 内存缓存
*
* @param string $name 缓存键
* @param string $value 缓存值(为''时,表示获取; 为null表示删除)
* @param mixed $expire = null/0 表示永久缓存,否则为缓存有效期
*/
function S($name, $value = '', $expire = null)
{
$cache = model('Cache'); if ($value === '') // 获取缓存
{
return $cache->get($name);
}
elseif (is_null($value)) // 删除缓存
{
return $cache->rm($name);
}
else
{
return $cache->set($name, $value, $expire);
}
}

最新文章

  1. 【Paddy】如何将物理表分割成动态数据表与静态数据表
  2. Apache 配置参考
  3. 使用虚幻引擎中的C++导论(四-内存管理与垃圾回收)(终)
  4. javascript中的defer是什么?
  5. Centos 7配置ntp时间同步
  6. 【转】linux C++ 获取文件信息 stat函数详解
  7. WeakHashMap理解
  8. 关于MPLS协议几个容易忽略的点
  9. BFS寻路的AS3实现
  10. log4net使用流程
  11. 事务管理在三层架构中应用以及使用ThreadLocal再次重构
  12. 前端(各种demo)三:优惠券,热区,等模块的实现(css方式)
  13. 关于VMware虚拟机安装镜像时黑屏的解决办法
  14. websocket 初识
  15. JavaEE 之 WebService
  16. 今天通过npm 安装 install 的时候出现的问题
  17. innerText兼容处理
  18. [leetcode.com]算法题目 - Sqrt(x)
  19. C++ string中的几个小陷阱,你掉进过吗?
  20. SDN第三次上机

热门文章

  1. C++ Primer 第2章 变量和基本类型
  2. 深入探讨ui框架
  3. iPhone:iOS界面,本地生成随机验证码
  4. jquery.color.js
  5. thinkphp中dump()方法
  6. 有许多部分没有在cgroup中显示啊,current/high/low/min等等
  7. 【bzoj2959】长跑 LCT+并查集
  8. 华中农业大学第四届程序设计大赛网络同步赛 J
  9. jquery使用--常见前端效果实现
  10. webpack最佳入门实践系列(4)