为什么在分配给它之前需要刷新变量?
问题描述:
在这段代码专业WordPress设计和开发,第二版的作者设置一个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('« Previous'); ?></div>
<div class="alignright"><?php next_posts_link('More »'); ?></div>
</div>
<?php
$wp_query = null;/***here***/
$wp_query = $temp;/***here***/
?>
答
你并不需要那么做。在初始化之前避免对它进行测试是很常见的做法(例如if($var)
在$var
之前得到一个值)。
除了保持较低的内存消耗外,并没有真正需要变量。所以如果你有一个漫长的过程,如果你没有设置中间变量,你可能会使用更少的峰值记忆。
至于释放内存考虑下面的例子为例:
$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)
实际上会调用垃圾回收器,这可以降低密集脚本中的高峰消耗。
答
在程序的顶部初始化变量并不少见,尽管这在你的例子中有些不必要。
初始化变量是为了让阅读代码的人可以看到代码中会使用哪些变量。如果你只是在需要的时候初始化变量,那么它可以使代码更加难以一目了然。
至于好/坏的做法,它并不真正在这里发挥作用。这是一种有其时间和地点的编码风格。在编写正确的算法时,这是非常有用的,在这种算法中,你需要保持直言不讳,但是在编写简单的代码时,并不总是必需的。
至于最后两行,他们似乎没有做任何事情(除非这只是代码的一部分)。该变量刚刚设置为null
,然后设置为$temp
,就是这样。如果这真的是代码的结束,那么你可以删除它,如果你想。
我不知道书/代码的细节,但通常只会*取消设置一个变量(数组条目等除外)以释放内存。但这只是在非常罕见的情况下需要的。 – ComFreek 2013-03-21 18:29:46
作者可能会更多地遵循他自己的标准编程风格,而在PHP中有任何有意义的原因可以做到这一点。 – jmbertucci 2013-03-21 18:32:37
你没有。第二项任务使第一项完全冗余。 – geoffspear 2013-03-21 18:32:38