php 之unset

      在php程序中经常会用到一个双重循环来构造一个二维或多维数组的数据。 在内层循环中一定要记得每次变量使用之后进行unset,否则下次循环会在此基础上继续增加数据。这是常识但是程序中经常出现这样的bug; 在运行时间较长的脚本中,一定要对反复使用的数组进行unset 以防内存泄漏
鉴于程序中出现了此类bug,查了下php 手册,深入的了解下unset。


unset — 释放给定的变量
unset() 在函数中的行为会依赖于想要销毁的变量的类型而有所不同。


A、如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,其它地方此变量将保持调用 unset() 之前一样的值。
<?php
function foo() { 
    global $bar;
    unset($bar);
    $bar = "blah\n";
    echo $bar;
}
$bar="something";
foo();
echo "$bar\n";
?>

输出:
blah
something

如果真的想销毁 全局变量,用以下代码:


<?php
function foo() {
    global $bar;
    unset($GLOBALS['bar']);
    $bar = "blah\n";
    echo $bar;
}
$bar="something";
foo();
echo "$bar\n";
?>


B、unset一个引用变量,只是释放了函数内部的局部变量,原变量不变。


<?php
function foo(&$bar) {
    unset($bar);
    $bar = "blah"; 
}
$bar = 'something';
echo "$bar\n";
foo($bar);
echo "$bar\n";
?>

输入:something
        something
C、在函数中unset一个静态变量,在下次调用该函数时被重新定义(也就是说unset 静态变量只在此函数内部unset之后的部分起作用)。
 <?php   
function foo()
{
    static $bar;//没有已定义的bar 新定义
    $bar++; 
    echo "Before unset: $bar, ";
   unset($bar);//静态变量被unset
    $bar = 23;
    echo "after unset: $bar\n";
}
foo();
foo();
foo();
?>

输出:
Before unset: 1, after unset: 22
Before unset: 2, after unset: 22
Before unset: 3, after unset: 22
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值