1. 云栖社区>
  2. PHP教程>
  3. 正文

关于php中值传递和引用传递的区别

作者:用户 来源:互联网 时间:2017-11-30 11:12:38

php引用传递区别关于中值

关于php中值传递和引用传递的区别 - 摘要: 本文讲的是关于php中值传递和引用传递的区别, 传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值 传引用 :真正的以地址的方式传递参数传递以后,行参和实参都是同一个对象,只是他们名字不同而已对行参的修改将影响实参的值 说明:传值:根copy是一样的。打个比方,我有


传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值
传引用 :真正的以地址的方式传递参数传递以后,行参和实参都是同一个对象,只是他们名字不同而已对行参的修改将影响实参的值

说明:

传值:根copy是一样的。打个比方,我有一橦房子,我给你建筑材料,你建了一个根我的房子一模一样的房子,你在你的房子做什么事都不会影响到我,我在我的房子里做什么事也不会影响到你,彼此独立。
传引用:让我想起了上大学时学习C语言的指针了,感觉差不多。打个比方,我有一橦房子,我给你一把钥匙,我们二个都可以进入这个房子,你在房子做什么都会影响到我。

看图


关于php中值传递和引用传递的区别-


下面是几个例子


(1)普通传值引用


$param1=1; $param2=2; $param2 = &$param1; //把变量1的内存地址赋给变量2;此时的变量2和变量1全等; echo $param2;// 1 $param1 = 5; //变量1和变量2是一处内存(也就是他们的引用地址是一样的),改变其中一个,另外一个也被改变; echo $param2; //显示为5


(2) 函数传值引用


$param1 = 1; $param2 = ''; //定义变量1function add(&$param2) //传参数{ $param2=3; //把3赋值给变量2//return $param2; //返回变量2}echo $param1; //1$param3=add($param1); //调用方法add,并将变量1的引用传给变量2


echo $param3;//3 echo $param1;//3


echo $param2;// ''


给数组里面的键值各增加10;
$arr = array(3,5);
foreach($arr as $k=>$v){
$v+=10;//1.更改无效,相当于遍历出的键值扔给变量$v,然后更改变量$v的值,跟数组无关;
echo $v." ";//输出13 15;
}
foreach($arr as $k=>$v){
$arr[$k]+=10;//2.更改有效,直接更改键名里面的值;
echo $v;//输出3,5;
}
foreach($arr as &$v){
$v+=10;//3.更改有效,遍历的键值直接给了$v的地址,这个地址其实就是键名..$v+10就等于$arr[$k]+10;
}
$a = 1;
$b = &$a;
unset($a);
echo $b; // 1
unset并没有真正销毁变量的作用...仅仅是切断了变量与内存之间的关系,内存只要还被引用着就不会被释放;
$b和$a同时指向1,切断其中$a的关系,$b还是指向1,所以上题不报错,照样输出1。


以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php , 引用 , 传递 , 区别 , 关于 中值 ,以便于您获取更多的相关知识。