1 <?php 2 //php引用变量:不同变量名指向同一地址。 3 //定义一个变量a,此时内存开辟了一块区域,$a指向该区域。 4 $a = 100; 5 var_dump($a); //int 100 6 //定义变量b,将a变量的值赋值给b,此时该区域有两个变量($a和$b)指向。 7 $b = $a; 8 var_dump($b); //int 100 9 //修改$a变量的值,php变量具有Copy On Write的特性,所以会复制并重写a所指向的区域值,此时a和b分别指向不同区域。 10 $a = 10; 11 var_dump($a); //int 10 12 var_dump($b); //int 100 13 14 //------------------------------------------------------------------ 15 16 $c = 100; 17 $d = &$c; 18 $c = 10; 19 var_dump($c); //int 10 20 var_dump($d); //int 10 21 //当引用指向时,php变量不在具有COW特性,且指向同一内存区域。 22 23 //* unset()只能消除变量的引用,不能删除其内存分配的空间
//* 对象本身就是引用传递 24 25 //------------------------------------------------------------------ 26 27 /* 28 例题: 29 写出如下程序的输出结果: 30 <?php 31 $data = ['a','b','c']; 32 foreach($data as $key=>$val){ 33 $val = &$data[$key]; 34 } 35 问:最终$data的值是多少? 36 */ 37 $data = ['a','b','c']; 38 foreach($data as $key=>$val){ 39 $val = &$data[$key]; 40 print_r($data); 41 } 42 43 /* 44 1.$key = 0, 45 $val = 'a', 46 $val = &$d[0] =>'a' 47 $data = ['a','b','c']; 48 49 2.$key = 1, 50 $val = 'b', =>$d[0] 51 $val = &$d[1] =>'b' 52 $data = ['b','b','c']; 53 54 1.$key = 2, 55 $val = 'c', =>$d[1] 56 $val = &$d[2]=>'c' 57 $data = ['b','c','c']; 58 */