常用知识 - 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就像我们平时在文件夹里做的删除文件操作,当删除快捷方式时,仅仅只是删除这个快捷方式文件,但并不删除快捷方式所指向的源文件