PHP笔记之引用变量

引用变量的定义和符号

引用变量:用不同的名字来访问同一变量的内容,符号为&;

注意:除了用&表示引用变量外,其实对象也是引用传递

引用传递和值传递

相同点:都是用两个名字来访问同一个变量的内容

不同点:值传递不会改变传递前的变量的值,即原有的变量和复制后的变量之间在COW(写后复制)后没有联系;引用传递原有变量和复制后的变量都指向同一变量的内容

值传递
//值传递
$a = 1;
$b = $a;
$a = 2;
echo $b;//result:$b = 1

注意:在传递的过程中,为了节省空间,在开始的时候,会使用COW原则(copy on write:只有执行写操作的时候才会在内存中开辟新的空间)

值传递在写操作之后,会重新开辟新的空间,用来存储b变量指向的内容

引用传递
//引用传递
$a = 1;
$b = &$a;//引用传递的符号&
$a = 2;
echo $b;//result:$b = 2

引用传递在写操作之后,b变量也同样指向a变量所指向的内容

//unset断开变量与变量指向的内容的联系
$a = 1;
$b = &$a;
$b = 2;
unset($b);
echo $a;//result:$a = 2;

 

综合题目解析

$arr = array('A','B','C');
foreach($arr as $key => $value){
    $value = &$arr[$key];
}
//$arr as $key => $value,$key为arr数组的下标,$value为arr数组下标所对应的值

//第一趟循环
$key = 0
$arr[0] = 'A'
$value = &$arr[0] = 'A'
第一趟循环中,value变量和arr[0]变量指向同一内容'A'

//第二趟循环
$key = 1;
$arr[1] = 'B';
value变量先赋值为arr[0],后重新指向到arr[1]所指向的内容
value刚开始所指向的arr[0]的内容先被改变,而后value变量重新指向到arr[1]所对应的内容
$arr[0] = $value = 'B'
$value = &$arr[1]

//第三趟循环
$key = 2;
$arr[2] = 'C'
value变量先赋值为arr[2]的值,而后重新指向arr[2]所指向的内容
$value = $arr[1] = 'C'
$value = &arr[2]

posted @ 2018-06-09 16:32  Boke先生的博客  阅读(83)  评论(0)    收藏  举报