1

このスニペットでは、Professional WordPress Design and Development、2nd Editionの作成者がPHP変数($ wp_query)をNULLに設定して、完全にフラッシュします

割り当てる前にこれを行う必要があるのはなぜですか?

<?php
$temp = $wp_query;
$wp_query= null;/***here***/
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$wp_query = new WP_Query( 'posts_per_page=5&paged='.$paged );/***here***/
while ( $wp_query->have_posts() ) : $wp_query->the_post();
?>

<h2>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</h2>
<?php the_excerpt(); ?>
<?php endwhile; ?>
<div class="navigation">
<div class="alignleft"><?php previous_posts_link( '&laquo; Previous' ); ?></div>
<div class="alignright"><?php next_posts_link( 'More &raquo;' ); ?></div>
</div>
<?php
$wp_query = null;/***here***/
$wp_query = $temp;/***here***/
?>
4

2 に答える 2

2

あなたは本当にそれをする必要はありません。初期化の前にそれに対するテストを避けるのが一般的な方法です (値を取得するif($var)前のようなもの)。$var

メモリ消費を低く抑える以外に、unset変数を ing する必要はありません。そのため、プロセスに時間がかかる場合は、中間変数の設定を解除すると、使用するピーク メモリが少なくなる可能性があります。

メモリを解放する例として、次の例を考えてみましょう。

$a = array(1,2,3,4,5,6,7,8,9,0);
print memory_get_usage().'/'.memory_get_usage(true).'<br />';
$a = 1;
print memory_get_usage().'/'.memory_get_usage(true).'<br />';

私のサーバーの1つで実行すると、出力は次のようになります。

622808/786432
621216/786432

最初の数字はスクリプトに割り当てたメモリ、2 番目の数字は OS から割り当てられた PHP です (私の理解では、間違っている場合は修正してください)。数値はバイト単位です。

したがって、メモリが効果的に PHP に解放されますが、システムには解放されないことがわかります。スレッドが終了すると、スレッド メモリは OS に解放されます。using は実際にガベージ コレクターを呼び出すことに注意してくださいmemory_get_usage(true)。これにより、負荷の高いスクリプトでのピーク時の消費を抑えることができます。

于 2013-03-21T18:33:29.680 に答える
1

プログラムの先頭で変数を初期化することは珍しくありませんが、あなたの例ではそうしていますが、多少不必要です。

変数の初期化は、コードを読んだ人がコードのさらに下で使用される変数を確認できるようにするために行われます。必要なときにのみ変数を初期化すると、コードが一目でわかりにくくなる可能性があります。

良い/悪い習慣に関しては、ここでは実際には関係ありません。それは、時間と場所があるコーディングのスタイルです。これは、口の中で舌をまっすぐに保つ必要がある適切なアルゴリズムを作成する場合に特に便利ですが、簡単なことを行うコードを作成する場合は必ずしも必要ではありません。

最後の 2 行に関しては、何もしていないように見えます (これがコードの一部でない限り)。変数は に設定されnull、次に に設定され$tempます。それだけです。それが本当にコードの終わりである場合は、必要に応じてそれを削除できます。

于 2013-03-21T18:52:35.607 に答える