より複雑な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 " ?> 上記のコードを実行すると、同様の結果が生成されます: 転載元: http://www.cnblogs.com/rethink/ |