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)before$var得到一个值)。

除了保持低内存消耗外,实际上不需要unseting 变量。因此,如果您有一个漫长的过程,如果您取消设置中间变量,您可能会使用更少的峰值内存。

作为释放内存的示例,请考虑以下示例:

$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 />';

在我的一台服务器上运行,输出是这样的:

622808/786432
621216/786432

第一个数字是您分配给脚本的内存,第二个数字是从操作系统分配的 PHP(据我了解——如果有错误请纠正我)。这些数字以字节为单位。

所以你可以看到内存被有效地释放给 PHP,而不是系统。一旦线程终止,线程内存就会被释放回操作系统。请注意,使用memory_get_usage(true)实际调用垃圾收集器,这可以降低密集脚本中的峰值消耗。

于 2013-03-21T18:33:29.680 回答
1

在程序顶部初始化变量并不少见,您的示例就是这样做的,尽管有些不必要。

初始化变量是为了让阅读代码的人可以看到将在代码中进一步使用的变量。如果您只在需要时初始化变量,那么它可能会使代码更难以一目了然。

至于好的/坏的做法,它在这里并没有真正发挥作用。这是一种有其时间和地点的编码风格。它在编写适当的算法时特别有用,在这种情况下您需要将舌头伸直放在嘴里,但在编写简单的代码时,并不总是需要这样做。

至于最后两行,它们似乎什么也没做(除非这只是代码的一部分)。变量只是设置为null,然后设置为$temp,就是这样。如果这确实是代码的结尾,那么您可以根据需要将其删除。

于 2013-03-21T18:52:35.607 回答