常用知识 - unset引用

  • 作者:KK

  • 发表日期:2016.7.14


unset的用法一般就像函数一样,比如unset($name)

很多人会误以为它是一个函数,其实它PHP语法的一部分,我们应该叫它unset语句


可以同时unset多个变量

如果你写过类似这样的2次usnet来销毁两个变量可就注意了:

unset($name);
unset($age);

其实可以直接写成一行来同时销毁多个变量,甚至可以写无限个变量:

unset($name, $age, $更多变量

对引用的处理方式

下面代码输出的应该是"aaa"

$a = 'aaa';
$b = &$a;
unset($b);
$b = 'bbb';
echo $a; //aaa

$b = &$a这句话执行后,所发生的事情其实就是有一块标识为$b的内存区域保存了一个引用地址,这个地址指向了$a

如果$b的值被修改(比如$b = 999),我们可以理解为PHP引擎看看$b的值是不是一个引用,是引用的话就找到引用,并将修改的值设置到引用的变量中($a)

而如果要unset掉$b的话就不是这个逻辑了,其实unset只是销毁$b这个变量所在的内存地址,并不会销毁$b的值($a的引用)所指的变量,所以$b这块内存被销毁了,但$a并不被销毁

所以上面代码中unset掉$b后,$a还存在,并且$b被重新赋值后$a并不受到影响,因为$b在unset后再赋值等于重新创建了一个新的变量,只是它也叫$b而已

说简单点就是当引用被unset时,引用源不会被unset


如果还是无法理解,那就打这样的比方:

$b相当于$a的快捷方式,unset就像我们平时在文件夹里做的删除文件操作,当删除快捷方式时,仅仅只是删除这个快捷方式文件,但并不删除快捷方式所指向的源文件