1, 变量定义:
通常学到的是, 变量代表存储空间以及其中数据的一个 "标识符".
变量名 指向 变量值
更深入的说是 变量指向内存的一块区域
2, 变量工作原理, 通过画图分析法 -- 内存空间
- <?php
- //php 引用变量: 不同变量名指向同一地址.
- // 定义一个变量 a, 此时内存开辟了一块区域,$a 指向该区域.
- $a = 100;
- var_dump($a); //int 100
- // 定义变量 b, 将 a 变量的值赋值给 b, 此时该区域有两个变量 ($a 和 $b) 指向.
- $b = $a;
- var_dump($b); //int 100
- // 修改 $a 变量的值, php 变量具有 Copy On Write 的特性, 所以会复制并重写 a 所指向的区域值, 此时 a 和 b 分别指向不同区域.
- $a = 10;
- var_dump($a); //int 10
- var_dump($b); //int 100
- //------------------------------------------------------------------
- $c = 100;
- $d = &$c;
- $c = 10;
- var_dump($c); //int 10
- var_dump($d); //int 10
- // 当引用指向时, php 变量不在具有 COW 特性, 且指向同一内存区域.
- //* unset()只能消除变量的引用, 不能删除其内存分配的空间
- //------------------------------------------------------------------
- /*
- 例题:
- 写出如下程序的输出结果:
- <?php
- $data = ['a','b','c'];
- foreach($data as $key=>$val){
- $val = &$data[$key];
- }
- 问: 最终 $data 的值是多少?
- */
- $data = ['a','b','c'];
- foreach($data as $key=>$val){
- $val = &$data[$key];
- print_r($data);
- }
- /*
- 1.$key = 0,
- $val = 'a',
- $val = &$d[0] =>'a'
- $data = ['a','b','c'];
- 2.$key = 1,
- $val = 'b', =>$d[0]
- $val = &$d[1] =>'b'
- $data = ['b','b','c'];
- 1.$key = 2,
- $val = 'c', =>$d[1]
- $val = &$d[2]=>'c'
- $data = ['b','c','c'];
- */
来源: http://www.bubuko.com/infodetail-2695607.html