區別PHP引用傳遞與值傳遞的小例子

定義php

  1. 傳值:是把實參的值賦值給行參 ,那麼對行參的修改,不會影響實參的值
  2. 傳引用 :真正的以地址的方式傳遞參數之後,行參和實參都是同一個對象,只是他們名字不一樣而已,對行參的修改將影響實參的值

 

說明函數

  1. 傳值:跟copy是同樣的。打個比方,我有一棟房子,我給你建築材料,你建了一個跟個人房子如出一轍的房子,你在你的房子作什麼事都不會影響到我,我在個人房子裏作什麼事也不會影響到你,彼此獨立。
  2. 傳引用:讓我想起了上大學時學習C語言的指針了,感受差很少。打個比方,我有一棟房子,我給你一把鑰匙,咱們二個均可以進入這個房子,你在房子作什麼都會影響到我。

 

實例學習

  1,傳值spa

  1. <?php    
  2. $param1=1;               //定義變量1    
  3. $param2=2;               //定義變量2    
  4. $param2 = $param1;       //變量1賦值給變量2    
  5. echo $param2;            //顯示爲1    
  6. ?>    



  2,傳引用指針

  1. <?php    
  2. $param2=1;               //定義變量2    
  3. $param1 = &$param2;      //將變量2的引用傳給變量1    
  4. echo $param2;            //顯示爲1    
  5. $param1 = 2;             //把2賦值給變量1    
  6. echo $param2;            //顯示爲2    
  7. ?>  


  3,函數傳值對象

  1. <?php    
  2. //傳值    
  3. $param1 = 1;                            //定義變量1    
  4. function add($param2)                   //傳參數    
  5. {    
  6.     $param2=3;                          //把3賦值給變量2    
  7. }    
  8. $param3=add($param1);                   //調用方法add,並將變量1傳給變量2    
  9. echo  '<br>$param1=='.$param1.'<br>';   //顯示爲$param1==1    
  10. echo  '<br>$param2=='.$param2.'<br>';   //顯示爲$param2==  由於$param2是局部變量,因此不能影響全局    
  11. echo  '<br>$param3=='.$param3.'<br>';   //顯示爲$param3==  由於add方法沒有返回值,因此$param3爲空    
  12. ?>    


  4,函數傳引用string

  1. <?php    
  2. //傳值    
  3. $param1 = 1;                            //定義變量1    
  4. function add(&$param2)                  //傳參數    
  5. {    
  6.     $param2=3;                          //把3賦值給變量2    
  7. //    return $param2;                   //返回變量2    
  8. }    
  9. echo  '<br>$param1=='.$param1.'<br>';   //顯示爲$param1==1  沒對變量1進行操做    
  10. $param3=add($param1);                   //調用方法add,並將變量1的引用傳給變量2    
  11. echo  '<br>$param1=='.$param1.'<br>';   //顯示爲$param1==3  調用變量過程當中,$param2的改變影響變量1,雖然沒有return    
  12. echo  '<br>$param2=='.$param2.'<br>';   //顯示爲$param2==   由於$param2局部變量,因此不能影響全局    
  13. echo  '<br>$param3=='.$param3.'<br>';   //顯示爲$param3==   若是把方法裏面的return註釋去掉的話就爲$param3==3    
  14. ?>    


  5,函數傳引用2io

  1. <?php    
  2.     
  3. //傳引用    
  4. $param1 = 1;    
  5. function &add(&$param2)    
  6. {    
  7.     $param2 = 2;    
  8.     return $param2;    
  9. }    
  10. $param3=&add($param1);    
  11. $param4=add($param1);    
  12. echo  '<br>$param3=='.$param3.'<br>';   //顯示爲$param3==2    
  13. echo  '<br>$param4=='.$param4.'<br>';   //顯示爲$param4==2    
  14. echo  '<br>$param1=='.$param1.'<br>';   //顯示爲$param1==2  調用變量過程當中,$param2的改變影響變量1    
  15.     
  16. $param3++;    
  17.     
  18. /* 下面顯示爲$param1==3,這是由於$param3和$param1引用到同一個地方,  
  19.  * 返回值前面加了地址符號仍是一個引用$param3=&add($param1);  
  20.  * 這樣$param3,$param2和$param1引用到同一個地方,當$param3++時,  
  21.  * $param1會被改變*/    
  22. echo  '<br>$param1=='.$param1.'<br>';      
  23.     
  24. $param4++;    
  25. /* 下面顯示爲$param1==3,這裏爲何是3而不是4呢,這是由於返回值前面沒有  
  26.  * 地址符號,它不是一個引用因此當$param4改變時不會影響$param1*/    
  27. echo  '<br>$param1=='.$param1.'<br>';    
  28. ?>    
相關文章
相關標籤/搜索