ホームページ >バックエンド開発 >PHPチュートリアル >TPフレームワークのFメソッドの戻り値について

TPフレームワークのFメソッドの戻り値について

WBOY
WBOYオリジナル
2016-06-23 13:53:181361ブラウズ

コードは実際には非常に単純ですが、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 メソッドです
17 行目の return は間違っています。あまりにも不注意です


下位バージョンの return によれば、
return strlen($value); と書くべきです

17 行目の return; は間違っています!不注意すぎます

下位バージョンに従って返すには、
return strlen($value); と書く必要があります。
8 行 return false; // TODO
11 行 return ThinkStorage::unlink($filename,'F');
22 行 return $_cache[$name]

29 行 return $value;これが唯一の戻る方法ではないでしょうか?渡したパラメーターに基づいて手動で問題を導き出すことで、問題がどこにあるのかを特定できますか?

Return false; // Todo

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] を返します

29 行が $value を返します

戻るのはここだけではないでしょうか?渡したパラメーターに基づいて手動で問題を導き出すことで、問題がどこにあるのかを特定できますか?


公式の関数では、キャッシュに成功するとnull値を返すことになっているようですが…
$valueを直接返すだけでも大丈夫です

ただし、$valueには大量のコンテンツが含まれている可能性があり、必要ありません

したがって、このように返すこともできます return ! Empty($value);
書き込みキャッシュなので、$value は書き込まれた内容を表します
空でないことは成功を意味します

要するに、何を返すか既存のアルゴリズムに依存します
TP は単なるツールです。これにより、あなたが彼に合わせるのではなく、彼があなたに適応できるようになります



$value を直接返すこともできます ただし、$value には多くのコンテンツが含まれる可能性があります必要ありません

したがって、このように返すこともできます return ! empty($value);
書き込みキャッシュであるため、$value は書き込まれた内容を表します
空でないことは成功を意味します

要するに、返すかは既存のアルゴリズムに依存します
TP は単なるツールであり、あなたではなくあなたに適応させることができます 彼に合わせてください


そうですね、フレームワークを使用するとき、私はいつもそれを書いた人が違うと感じます私の考えは正しいです。ありがとう!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。