<?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 10var_dump($b); ???//int 100//------------------------------------------------------------------$c = 100;$d = &$c;$c = 10;var_dump($c); ???//int 10var_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‘]; */
php-引用变量的定义和原理
原文地址:http://www.cnblogs.com/luma/p/7465388.html