2013-03-21 115 views
1

在这段代码专业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('&laquo; Previous'); ?></div> 
<div class="alignright"><?php next_posts_link('More &raquo;'); ?></div> 
</div> 
<?php 
$wp_query = null;/***here***/ 
$wp_query = $temp;/***here***/ 
?> 
+0

我不知道书/代码的细节,但通常只会*取消设置一个变量(数组条目等除外)以释放内存。但这只是在非常罕见的情况下需要的。 – ComFreek 2013-03-21 18:29:46

+2

作者可能会更多地遵循他自己的标准编程风格,而在PHP中有任何有意义的原因可以做到这一点。 – jmbertucci 2013-03-21 18:32:37

+1

你没有。第二项任务使第一项完全冗余。 – geoffspear 2013-03-21 18:32:38

回答

2

你并不需要那么做。在初始化之前避免对它进行测试是很常见的做法(例如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)实际上会调用垃圾回收器,这可以降低密集脚本中的高峰消耗。

+0

因此,在PHP中如果$ v = 1,然后您将2赋值给$ v,那么1仍在内存中?对于所有意图和目的,是的, – MTVS 2013-03-21 18:40:55

+0

。参见上面的编辑示例。 – hexblot 2013-03-21 20:51:05

1

在程序的顶部初始化变量并不少见,尽管这在你的例子中有些不必要。

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

至于好/坏的做法,它并不真正在这里发挥作用。这是一种有其时间和地点的编码风格。在编写正确的算法时,这是非常有用的,在这种算法中,你需要保持直言不讳,但是在编写简单的代码时,并不总是必需的。

至于最后两行,他们似乎没有做任何事情(除非这只是代码的一部分)。该变量刚刚设置为null,然后设置为$temp,就是这样。如果这真的是代码的结束,那么你可以删除它,如果你想。

相关问题