關於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; //
相關文章
相關標籤/搜索