博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于php中值传递和引用传递的区别
阅读量:6655 次
发布时间:2019-06-25

本文共 1193 字,大约阅读时间需要 3 分钟。

hot3.png

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

说明:

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

看图

下面是几个例子

(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; // 1unset并没有真正销毁变量的作用...仅仅是切断了变量与内存之间的关系,内存只要还被引用着就不会被释放; $b和$a同时指向1,切断其中$a的关系,$b还是指向1,所以上题不报错,照样输出1。

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/hongjiang/blog/1552794

你可能感兴趣的文章
js获取textarea标签中的换行符和空格。
查看>>
国内的Maven服务器
查看>>
C# winform DataGridView 的18种常见属性
查看>>
Cygwin的安装、配置与调整
查看>>
MySQL存储过程
查看>>
做有中国特色的程序员
查看>>
JVM【第九回】:【OutOfMemoryError异常之本机直接内存溢出】
查看>>
Angular
查看>>
ANTLR Reference书摘
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
《Effective C++第三版》读书笔记——构造/析构/赋值运算
查看>>
Redhat 5.3 Linux内核的升级!
查看>>
Ubuntu Mate:扩展存储到整张SD卡
查看>>
学习使用clojure(1)
查看>>
EXCEL 2010规划求解基础篇
查看>>
es学习5-slowlog
查看>>
nf_conntrack: table full, dropping packet
查看>>
Linux的五个查找命令:find,locate,whereis,which,type
查看>>
KK课表抓取教务系统
查看>>