php引用&使用笔记

引用与赋值是两个概念:引用是共用同一个内存地址,一个改变其他也会变,赋值是另外开辟内存空间,一个改变其他不会变

一个简单例子:

$a=123;     //$a开辟一个内存空间存储123
$b=&$a;     //$b通过&引用$a的内存地址,所以是两者指向同一个地方
var_dump($b);      //此时$b打印的值为123
$b=567;     //当$b的值改变成567时,此时$a和$b共同指向的内存地址的值改变成567
var_dump($a);   //所以$a打印的值为567

  

更深入的引入例子:

$data=['a','b','c'];
foreach($data as $k=> $v){
    $v = &$data[$k];
    var_dump($data);
}
var_dump($data);  

解答思路:

  (1)首先第一次循环在未进入循环体时$v是指向一个内存地址,进入循环体后$data[0]是指向另一个内存地址,经过引用后$v引入了$data[0]的内存地址

  输出a,b,c

  (2)然后第二次在未进入循环体执行foreach这行代码时,$v的值为b,所以导致$data[0]变成了b

    进入循环体后$v引用了data[1]的内存地址

    

  输出b,b,c

  (3)同理第三次在未进入循环体执行foreach这行代码时,$v的值为c,所以导致$data[1]变成了c,进入循环体后$v引用$data[2]的内存地址

  输出b,b,c

 

所以整个流程的输出结果为:

posted @ 2018-06-04 12:11  legendheng  阅读(237)  评论(1)    收藏  举报