ホームページ > バックエンド開発 > PHPチュートリアル > 「繰り返し読み取り」を避けるために静的を使用する_PHP チュートリアル

「繰り返し読み取り」を避けるために静的を使用する_PHP チュートリアル

WBOY
リリース: 2016-07-21 14:55:41
オリジナル
951 人が閲覧しました

より複雑なWebプログラムの開発では、オブジェクト指向のデータ操作方法やビジネスロジックが複雑すぎるため、開発者は開発プロセス中に無意識にデータを繰り返し読み取ることがよくあります。
例:
$result1 = tableobjectPeer::getResult($var1,$var2,$var3);
開発者は、テーブル データが必要なときに、tableobjectPeer::getResult メソッドを直接呼び出します。
または、プログラムが転送しているときに、tableobjectPeer::getResult メソッドの繰り返し呼び出しが発生し、「繰り返し読み取り」が発生します。

同じような「繰り返し読み」を避けるためには、開発者が「繰り返し読みを避ける」という意識を持ってコードを開発することが最も重要です。
実際には、
$result1 = tableobjectPeer::getResult($var1,$var2,$var3);
の後に、
$result2 = $result1;
$result3 = $result1;
を実行するだけです。このようにして、多数の「繰り返し読み取り」を回避できます。
しかし、開発者が最初にこれを行わなかった場合、この領域のリファクタリングは多大な作業になる可能性があります。
また、フレームワーク内のforward()のせいで「繰り返し読み込み」が発生しやすくなっています。 「繰り返し読み取り」が forward() によって引き起こされている場合、この方法は実行できません (これは、PHP の symfony フレームワークの場合のように、異なる開発言語や異なる開発フレームワークに関連している可能性があります)。

そのため、上記の方法を最適化に使用しながら、より複雑な状況では、別の方法を採用することにしました: static を使用し、変数を static 変数に設定して、データの繰り返し読み取りを避ける

以下は引用内容です:
//静的をオンにするかどうかを制御するために、書き換える関数に $is_static=1 変数も追加してください。
function staticFunc ($var1,$var2,$var3,$is_static=1)
{
if ( $is_static == 1 )//関数の結果はデフォルトでキャッシュする必要があります
{
static $result_array;//これ配列は保存に使用されます 関数の結果は、さまざまなパラメーターを使用した結果のキャッシュをサポートします
$vars_string = Serialize( func_get_args() );

if ( empty( $result_array ) )//最初の実行には初期化が必要です
{
$result_array = array(); }

if ( array_key_exists( $vars_string, $result_array ) )//パラメータはすでに存在します
{
return $result_array[$vars_string];// 静的変数に保存された結果を返します
}else //パラメータが存在しません
{
$result_array[$vars_string] = '';//結果は後で追加されます
}
}else//結果の静的バッファリングを使用しません
{
if ( empty( $result_array ) )
{
$result_array = array( ; (1,2,3);
echo "
";
echo staticFunc(2,2,2);
echo "
";
echo staticFunc(1,2,3);
echo "
";
echo "
"; echo "
";
echo staticFunc (3,3,3,0);
echo "
?>


上記のコードを実行すると、同様の結果が生成されます:
16667
8888
16667
8888
2193
1014
1行目と3行目の結果には一貫性があり、2行目と4行目の結果は次のようになります。結果は同じであり、関数のパラメータが同じである限り、関数の結果は事実上「キャッシュ」されることを示しています。
4 行目と 5 行目から、$is_static 変数を設定すると、「キャッシュ」を有効にするかどうかを効果的に制御できることがわかります。

補足: 上記の静的メソッドを使用すると、1 つのスレッドでデータを繰り返し読み取ることを効果的に回避できますが、キャッシュは 1 つのスレッドにのみ存在し、異なるスレッドは互いに独立しています。これはスレッド内の関数結果の単なる「キャッシュ」ですが、その原理は他のキャッシュ方法と似ており、異なるパラメーター (異なる状況) に対してキャッシュ キーを構築する必要があります。

転載元: http://www.cnblogs.com/rethink/

www.bkjia.com本当http://www.bkjia.com/PHPjc/364345.html技術記事より複雑なWebプログラムの開発では、オブジェクト指向のデータ操作方法やビジネスロジックが複雑すぎるため、開発者は開発プロセス中に無意識に繰り返し読み込むことがよくあります...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート