1. php引用变量的概念和定义(延伸:php引用变量的原理);
概念: 在php中引用意味着用不同的名字访问同一个变量内容;
定义方式: 使用&符号;
工作原理:
$a = range(1, 1000);
$b = $a;
$a与$b指向的是一个空间,当$a发生改变的时候,$b还是指向原来的空间,而$a触发cow(copy on write)机制指向了另一个新空间;
$b = &$a;
$a与$b还是指向一个空间,不过此时$a改变的时候不会再开启另一块空间,而是直接改变原来得空间.$b与$a共用一个空间,$a改变$b也跟着改变.
可以使用memory_get_usage()(查看内存使用情况)和xdebug_debug_zval()(变量容器)来验证;
Xdebug_debug_val()打印出来 refcout: 指向此空间的个数, is_ref(): 是否引用;
Unset: unset()只会销毁变量,并不会销毁空间
$a = 1;
$b = &$a;
Unset($a);
Echo $b; //结果是1;
对象的特点: 对象的本身就是引用传值;
Class A
{
Public $name = ‘aa’;
}
$a = new A;
$b = $a;
$b->name = ‘bb’;
Echo $a->name; //结果是’bb’; a和b共用一个地址,如果要复制的话 可以用__clone()
真题
$data = array(1,2,3);
Foreach( $data as $k=>$v ){
$v = &$data[$k];
}
Var_dump($data); //结果是2,3,3;