コードは実際には非常に単純ですが、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; } }
下位バージョンの return によれば、
return strlen($value); と書くべきです
下位バージョンに従って返すには、
return strlen($value); と書く必要があります。
8 行 return false; // TODO
11 行 return ThinkStorage::unlink($filename,'F');
22 行 return $_cache[$name]
Return Thinkstorage :: unlink ($ FILENAME, 'F');
Ring 17 Return
Return $ _Cache [$ Name]
Return $ 29 Value;帰る場所はここだけ?渡したパラメーターに基づいて手動で問題を導き出すことで、問題がどこにあるのかを特定できますか?
strlen が Null を返す理由は、$value が配列であるためです
ThinkStorage::put($filename,serialize($value),'F'); を直接返す必要があると思います
( $filename,serialize($value),'F'); このように変更できますか?
8 行 return false; // TODO
11 行 return ThinkStorage::unlink($filename,'F');
17 行が戻ります
22 行が $_cache[$name] を返します
ただし、$valueには大量のコンテンツが含まれている可能性があり、必要ありません
したがって、このように返すこともできます return ! Empty($value);
書き込みキャッシュなので、$value は書き込まれた内容を表します
空でないことは成功を意味します
要するに、何を返すか既存のアルゴリズムに依存します
TP は単なるツールです。これにより、あなたが彼に合わせるのではなく、彼があなたに適応できるようになります
したがって、このように返すこともできます return ! empty($value);
書き込みキャッシュであるため、$value は書き込まれた内容を表します
空でないことは成功を意味します
要するに、返すかは既存のアルゴリズムに依存します
TP は単なるツールであり、あなたではなくあなたに適応させることができます 彼に合わせてください
そうですね、フレームワークを使用するとき、私はいつもそれを書いた人が違うと感じます私の考えは正しいです。ありがとう!