关于TP框架里面F方法返回值的问题

际遇_ 2014-07-22 10:26:55
代码其实很简单,我从数据库中读取数据出来然后用F方法缓存到文件,文件建立了也有数据写入,但是F方法返回的是NULL,百思不得其解。

public function updateCache(){

$db = M('category');
$data = $db->select();
$f = F('data',$data)
var_dump($f);//////输出的是null

}

其实我就是想利用F方法的返回值做个判断我缓存成功...这是我的目的...但我找了半天问题也不知道为何F方法返回的是NULL。
...全文
1929 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
892336606 2016-07-05
  • 打赏
  • 举报
回复
际遇_ 2014-07-23
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
你直接返回 $value 就可以 不过 $value 中可能有很多内容,而你并不需要 所以这样返回也可以 return ! empty($value); 既然是写缓存,那么 $value 表示的就是写入的内容 非空表示成功 总之返回什么要根据你已有的算法决定 TP 只是工具,这能让他来适应你,而不是你去迁就他
嗯用框架的时候总感觉写的人跟我想的不一样 老大说得对 受教了!谢谢!
xuzuning 2014-07-23
  • 打赏
  • 举报
回复
你直接返回 $value 就可以 不过 $value 中可能有很多内容,而你并不需要 所以这样返回也可以 return ! empty($value); 既然是写缓存,那么 $value 表示的就是写入的内容 非空表示成功 总之返回什么要根据你已有的算法决定 TP 只是工具,这能让他来适应你,而不是你去迁就他
际遇_ 2014-07-23
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
8 行 return false; // TODO 11 行 return Think\Storage::unlink($filename,'F'); 17 行 return 22 行 return $_cache[$name] 29 行 return $value; 不就这几处返回吗?你根据你传入的参数,手工推导一下不就知道问题出在哪里了?
看官方的函数好像意思就是缓存成功就是返回空值...
际遇_ 2014-07-23
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
8 行 return false; // TODO 11 行 return Think\Storage::unlink($filename,'F'); 17 行 return 22 行 return $_cache[$name] 29 行 return $value; 不就这几处返回吗?你根据你传入的参数,手工推导一下不就知道问题出在哪里了?
strlen返回Null的原因是$value是数组 Think\Storage::put($filename,serialize($value),'F');返回的是true 我觉得应该直接return Think\Storage::put($filename,serialize($value),'F');这样修改 可以吗
xuzuning 2014-07-23
  • 打赏
  • 举报
回复
8 行 return false; // TODO 11 行 return Think\Storage::unlink($filename,'F'); 17 行 return 22 行 return $_cache[$name] 29 行 return $value; 不就这几处返回吗?你根据你传入的参数,手工推导一下不就知道问题出在哪里了?
际遇_ 2014-07-23
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
17行 return ; 空返回是不对的!他们太粗心了 按低版本的返回,应写作 return strlen($value);
老大我按你写的修改以后返回的也还是null 是为什么
xuzuning 2014-07-23
  • 打赏
  • 举报
回复
17行 return ; 空返回是不对的!他们太粗心了 按低版本的返回,应写作 return strlen($value);
际遇_ 2014-07-23
  • 打赏
  • 举报
回复
引用 5 楼 wander_wind 的回复:
F函数读取缓存会返回数据,写入缓存当然返回null啦 想要数据?$data = F('data');
    public function put($filename,$content,$type=''){
        $dir         =  dirname($filename);
        if(!is_dir($dir))
            mkdir($dir,0755,true);
        if(false === file_put_contents($filename,$content)){
            E(L('_STORAGE_WRITE_ERROR_').':'.$filename);
        }else{
            $this->contents[$filename]=$content;
            return true;
        }
    }
这是调用的Put方法 应该成功了是返回true的啊
智商众筹 2014-07-23
  • 打赏
  • 举报
回复
F函数读取缓存会返回数据,写入缓存当然返回null啦 想要数据?$data = F('data');
际遇_ 2014-07-23
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
你不能贴出来吗?还要我去下载一个?
function F($name, $value='', $path=DATA_PATH) {
    static $_cache  =   array();
    $filename       =   $path . $name . '.php';
    if ('' !== $value) {
        if (is_null($value)) {
            // 删除缓存
            if(false !== strpos($name,'*')){
                return false; // TODO 
            }else{
                unset($_cache[$name]);
                return Think\Storage::unlink($filename,'F');
            }
        } else {
            Think\Storage::put($filename,serialize($value),'F');
            // 缓存数据
            $_cache[$name]  =   $value;
            return ;
        }
    }
    // 获取缓存数据
    if (isset($_cache[$name]))
        return $_cache[$name];
    if (Think\Storage::has($filename,'F')){
        $value      =   unserialize(Think\Storage::read($filename,'F'));
        $_cache[$name]  =   $value;
    } else {
        $value          =   false;
    }
    return $value;
}
xuzuning 2014-07-23
  • 打赏
  • 举报
回复
你不能贴出来吗?还要我去下载一个?
际遇_ 2014-07-23
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
不应该的!贴出你的 F 函数定义
就是TP框架最新版的F函数...老大
xuzuning 2014-07-23
  • 打赏
  • 举报
回复
不应该的!贴出你的 F 函数定义

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧