Maison > Article > développement back-end > 关于TP框架里面F方法返回值的问题
代码其实很简单,我从数据库中读取数据出来然后用F方法缓存到文件,文件建立了也有数据写入,但是F方法返回的是NULL,百思不得其解。
public function updateCache(){ $db = M('category'); $data = $db->select(); $f = F('data',$data) var_dump($f);//////输出的是null }
不应该的!贴出你的 F 函数定义
不应该的!贴出你的 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; } }
17行 return ;
空返回是不对的!他们太粗心了
按低版本的返回,应写作
return strlen($value);
17行 return ;
空返回是不对的!他们太粗心了
按低版本的返回,应写作
return strlen($value);
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;
不就这几处返回吗?你根据你传入的参数,手工推导一下不就知道问题出在哪里了?
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 只是工具,这能让他来适应你,而不是你去迁就他