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

传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值

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

说明:

传值:根copy是一样的。打个比方,我有一橦房子,我给你建筑材料,你建了一个根我的房子一模一样的房子,你在你的房子做什么事都不会影响到我,我在我的房子里做什么事也不会影响到你,彼此独立。

传引用:让我想起了上大学时学习C语言的指针了,感觉差不多。打个比方,我有一橦房子,我给你一把钥匙,我们二个都可以进入这个房子,你在房子做什么都会影响到我。

看图

9def198f864f13d661f47138b4f8b026.png

下面是几个例子

(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 = '';                         //定义变量1

function 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值