// unset 只会取消引用,不会销毁空间
//
$sss = range(0, 3);
$t = &$sss;
unset($t); //只取消了$t的引用,并没有消除空间
print_r($sss);
/**
*
*/
class p1
{
public $name = 'dao';
}
$p1 = new p1;
xdebug_debug_zval('p1');
$p2 = $p1;
xdebug_debug_zval('p1');
$p2->name = "jian";
xdebug_debug_zval('p1');
// (refcount=1, is_ref=0)
// object(p1)[1]
// public 'name' => (refcount=2, is_ref=0)string 'dao' (length=3)
// p1:
// (refcount=2, is_ref=0)
// object(p1)[1]
// public 'name' => (refcount=2, is_ref=0)string 'dao' (length=3)
// p1:
// (refcount=2, is_ref=0)
// object(p1)[1]
// public 'name' => (refcount=0, is_ref=0)string 'jian' (length=4)
// 有结果看出 , 对象p1 和 p2 还是指向的同一块空间,修改p2的值,p1的值也会改变
// 对象复制空间可以使用clone来解决
// 引用例题
// 写出如下程序输出结果,程序运行时
// 每一次循环结束后变量$d的值是什么?请解释
// 程序执行完成后变量$d的值是什么?请解释
/**
* $d = ['a','b','c'];
*
*foreach ($d as $k => $v) {
* $v = &$d[$k];
*}
*
*$k = 0 $v = a
*$v = &$d[0]
*
*$k = 1 $v = b ; //因为 $v = &$d[0] $d[0]=b
*$v = &$d[1]; // $d[1] = b
*
*$k = 2 $v = c; 因为 $v = &$d[1] $d[1]=c
*$v = &$d[2]; //$d[2] = c
*
* 所以结果是 b c c
*/