欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2024-01-24 12:27:16
...
代码其实很简单,我从数据库中读取数据出来然后用F方法缓存到文件,文件建立了也有数据写入,但是F方法返回的是NULL,百思不得其解。
public function updateCache(){		$db = M('category');		$data = $db->select();		$f = F('data',$data)		var_dump($f);//////输出的是null			}

其实我就是想利用F方法的返回值做个判断我缓存成功...这是我的目的...但我找了半天问题也不知道为何F方法返回的是NULL。


回复讨论(解决方案)

不应该的!贴出你的 F 函数定义

不应该的!贴出你的 F 函数定义



就是TP框架最新版的F函数...老大

你不能贴出来吗?还要我去下载一个?

你不能贴出来吗?还要我去下载一个?



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;}

F函数读取缓存会返回数据,写入缓存当然返回null啦
想要数据?$data = F('data');

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的啊

17行 return ;
空返回是不对的!他们太粗心了

按低版本的返回,应写作
return strlen($value);

17行 return ;
空返回是不对的!他们太粗心了

按低版本的返回,应写作
return strlen($value);



老大我按你写的修改以后返回的也还是null 是为什么

8 行 return false; // TODO
11 行 return Think\Storage::unlink($filename,'F');
17 行 return
22 行 return $_cache[$name]
29 行 return $value;

不就这几处返回吗?你根据你传入的参数,手工推导一下不就知道问题出在哪里了?

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');这样修改 可以吗

8 行 return false; // TODO
11 行 return Think\Storage::unlink($filename,'F');
17 行 return
22 行 return $_cache[$name]
29 行 return $value;

不就这几处返回吗?你根据你传入的参数,手工推导一下不就知道问题出在哪里了?



看官方的函数好像意思就是缓存成功就是返回空值...

你直接返回 $value 就可以
不过 $value 中可能有很多内容,而你并不需要
所以这样返回也可以 return ! empty($value);
既然是写缓存,那么 $value 表示的就是写入的内容
非空表示成功

总之返回什么要根据你已有的算法决定
TP 只是工具,这能让他来适应你,而不是你去迁就他

你直接返回 $value 就可以
不过 $value 中可能有很多内容,而你并不需要
所以这样返回也可以 return ! empty($value);
既然是写缓存,那么 $value 表示的就是写入的内容
非空表示成功

总之返回什么要根据你已有的算法决定
TP 只是工具,这能让他来适应你,而不是你去迁就他



嗯用框架的时候总感觉写的人跟我想的不一样 老大说得对 受教了!谢谢!