关于unset的用法

unset ( mixed $var [, mixed $... ] ) : void

1、unset() 销毁指定的变量。

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

3、如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。

可见,unset的用法并不像我们理解的那么简单。

一、常规操作

Demo1:

$t = 12;
unset($t);
var_dump(isset($t));// false

二、销毁全局变量

Demo2:

// 直接销毁
$_POST['name'] = 'rao';
unset($_POST);

// 变为局部变量
$t = 12;

function t(){
	global $t;
	echo $t.PHP_EOL; // 12
	unset($t);
	var_dump(isset($t)); // false
}

t();
echo $t.PHP_EOL; // 12

三、销毁引用

如果在函数中 unset() 一个通过引用传递的变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。

Demo3:

扫描二维码关注公众号,回复: 8884316 查看本文章
function foo(&$bar) {
    unset($bar);
    $bar = "blah";
}

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

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

Demo4:

$a = 12;
$b = &$a;

echo $a, $b, PHP_EOL;

$c = $b;

$b = 13;

echo $a, $b, $c, PHP_EOL;

四、销毁静态变量

如果在函数中 unset() 一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。

Demo5:

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

foo(); // Before unset: 1, after unset: 23
foo(); // Before unset: 2, after unset: 23
foo(); // Before unset: 3, after unset: 23
发布了421 篇原创文章 · 获赞 25 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/raoxiaoya/article/details/104093690