PHP引用传值

首先需要弄清楚几个概念:

变量名和变量的值是两个概念,
变量名是指一段内存空间,
空间里面存放的才是变量的值。

传值和传引用的区别

按值传递

1.在函数范围内对值得任何改变在函数外部都会被忽略

2.按值传递时,php必须复制值,如果是大型字符串或是对象等,这是一个代价很大的操作,耗内存。

 

按引用传递
1.在函数内对值得任何改变,在函数外部也能反映出来

2.按引用传递时不需要复制值,对于性能提高有好处

 

例一:

1 <?php
2 $a= 'hello world';
3 $b = &$a;   
4 unset($a);   //只是解除了变量名和值之间的对应关系$a被销毁了,但是$b还存在
5 echo $b;     // hello world,只有没有任何变量引用改地址了,内存才会回收。

如图所示

unset($a)前

unset($b)后

例二:

 1 <?php
 2 
 3     $data=array('a','b','c');
 4     foreach($data as $key=>$value){
 5         $value=&$data[$key];  /**引用赋值,即将$value指向$data[$key]的地址,
 6                               *    下次改变$value的值,也就改变了$data[$key]的
 7                               * 值,这是理解此题的关键.                              
 8                               */    
 9         print_r($data);     //每次循环后将$data打印出来,便于分析结果。
10         echo '<br/>';
11     }
12     
13     print_r($data);
14     
15 Array ( [0] => a [1] => b [2] => c ) //第一次循环,数组没有改变,但是$value指向了$data[1]
16 Array ( [0] => b [1] => b [2] => c ) //第二次循环,此时将b赋值给了$value,所以$data[1]在第二次循环发生了改变,同时$value指向了$data[2];
17 Array ( [0] => b [1] => c [2] => c ) //第三次循环,过程同第二次,将$data[2]的值改变了

 

转载于:https://www.cnblogs.com/iaknehc/p/5989980.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值