当前位置:Gxlcms > PHP教程 > 关于TP框架里面F方法返回值的问题

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

时间:2021-07-01 10:21:17 帮助过:4人阅读

代码其实很简单,我从数据库中读取数据出来然后用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 只是工具,这能让他来适应你,而不是你去迁就他



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

人气教程排行