为什么,如果有的话,在分配变量之前需要刷新变量?

时间:2013-03-21 18:27:26

标签: php wordpress

在此片段中,专业WordPress设计与开发,第2版的作者将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***/
?>

2 个答案:

答案 0 :(得分:2)

你真的不需要这样做。通常的做法是避免在初始化之前对其进行测试(类似if($var)之前$var获取值)。

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

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

$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)实际上会调用垃圾收集器,这可以降低密集脚本中的峰值消耗。

答案 1 :(得分:1)

在程序顶部初始化变量并不罕见,这是您的示例所做的,尽管有点不必要。

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

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

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