【Php】在函数内部使用unset的一些注意点

/**
 * Author:RDP
 * My mail:abel1314520@gmail.com
 * My blog: blog.teamhaka.com

*/

1 在函数中 unset() 一个全局变量,则只是函数内的局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。使用$GLOBALS数组来 unset() 可以在全局意义上销毁。

function destroy_foo() {
    global $foo;
    unset($foo);
}

$foo = 'bar';
destroy_foo();
echo $foo;

执行结果是:
bar

利用$GLOBALS数组来进行全局意义上的销毁:

function destroy_foo() {
    unset($GLOBALS['foo']);
}

$foo = 'bar';
destroy_foo();
echo $foo;

2 与1类似:在函数中 unset() 一个通过引用传递的变量,则只是函数内的局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值

function foo(&$bar) {
    unset($bar);
    $bar = "blah";
}

$bar = 'something';
echo "$bar\n";

foo($bar);
echo "$bar\n";

执行结果是:
something
something


3 在函数中 unset() 静态变量的话,在函数内部此静态变量将被销毁。但是此静态变量在销毁前所被赋予的值仍然被保存在内存中。当再次调用这个函数时,保存在内存中的值将被唤醒复原给这个静态变量。(即:在函数中 unset() 静态变量只会在函数内部销毁,在整个脚本页面中这个值依然是存在并在函数被再次调用时被唤醒复原)

function foo() {
    static $bar;
    $bar++;
    echo "Before unset: $bar, ";
    unset($bar);
    $bar++;
    echo "after unset: $bar";
}

foo();
foo();
foo();

执行结果:
Before unset: 1, after unset: 1
Before unset: 2, after unset: 1
Before unset: 3, after unset: 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值