php引用变量

 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  */
原文地址:https://www.cnblogs.com/lxj0205/p/9447597.html