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

  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; //显示为5code

(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;//3io

echo  $param2;//  ''function

给数组里面的键值各增长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;
}
 1
unset并无真正销毁变量的做用...仅仅是切断了变量与内存之间的关系,内存只要还被引用着就不会被释放; 
$b和$a同时指向1,切断其中$a的关系,$b仍是指向1,因此上题不报错,照样输出1。$a = 1;
$b = &$a;
unset($a);
echo $b; //
相关文章
相关标签/搜索