多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > php函數的傳值與傳址(引用)詳解

php函數的傳值與傳址(引用)詳解

來源:程序員人生   發布時間:2014-03-16 12:22:31 閱讀次數:3152次

在php中我們函數傳值就比較簡單了,但可能有些朋友地天真無邪函數傳址或引用搞不明白,下面小編來給各位介紹在php中函數傳值與傳址(引用)介紹,希望對各位有所幫助。

php中引用的用法:

1. 變量的引用賦值: $a = &$b

2. 函數調用時的引用參數傳遞

   1) 早期php是在調用時通過&符號傳遞引用類型的變量, 比如: func(&$arg);

   2) 后來, 函數的引用類型參數被規定為需要在函數聲明時定義, 不如: function func(&$arg);

注:引用聲明時定義引用類型參數后,運行時引用參數傳遞被廢棄,需要在php.ini中增加allow_call_time_pass_reference來開啟.

3. 函數返回引用類型,這種應用方式需要聲明函數時,在函數名前增加&符號,并且,在調用時,要用引用賦值方式, 實例代碼如下:

  1. function &func() { 
  2.     return $a
  3. $a = func();  //這種調用方式得到的不是引用傳值 
  4. $a =& func(); //這樣調用才是引用傳值 

簡而言之,就是讓函數的返回一個引用類型的值,一個更實際的例子,代碼如下:

  1. $a = 1; 
  2. function &func(&$a) { 
  3.   return $a
  4. $b = func($a); 
  5. $c =& func($a); 
  6. $b = 2; 
  7. echo "a: $a, b: $b, c: $c. <br />/n"
  8. //輸出a: 1, b: 2, c: 1. 
  9. //可見對$b的修改不會影響$a 
  10. $c = 3; 
  11. echo "a: $a, b: $b, c: $c. <br />/n"
  12. //輸出a: 3, b: 2, c: 3. 
  13. //可見對$c的修改會影響$a 

php函數傳值的幾個細節,如下:

一、基本數據類型的傳值

  1. /* **************************************************** */  
  2. function testvar($k){ 
  3.  $k = 40; 
  4. $c = 30; 
  5. //給一個函數參數傳一個基本數據類型(整型,布爾,字符 ...), 實際上傳的就是值 ; 
  6. testvar($c); 
  7. echo $c;//結果是:30 
  8. function testvar2(&$k){ 
  9.  $k = 40; 
  10. $e = 30; 
  11. //給一個函數參數傳一個基本數據類型(整型,布爾,字符 ...), 實際上傳的y就是地址 ; 
  12. testvar2($e); 
  13. echo $e;//結果是:40 
  14.  
  15. /* **************************************************** */ 

二、數組(默認情況下是復制一份數據),如要傳地址則&$arr.

  1. $arr1 = array(-1,5,0); 
  2. function testArr($arr){ 
  3.  for($i=0;$i<count ($arr);$i++){ 
  4.   for($j=$i+1;$j<count($arr);$j++){ 
  5.    if($arr[$i]>$arr[$j]){ 
  6.     $temp = $arr[$i]; 
  7.     $arr[$i] = $arr[$j]; 
  8.     $arr[$j] = $temp
  9.    } 
  10.   } 
  11.  
  12.  } 
  13.  print_r($arr);  //結果:Array ( [0] => -1 [1] => 0 [2] => 5 )  
  14. testArr($arr1); 
  15. print_r($arr1);  //結果:Array ( [0] => -1 [1] => 5 [2] => 0 )  
  16.  
  17. function testArr2(&$arr){ 
  18.  for($i=0;$i</count><count ($arr);$i++){ 
  19.   for($j=$i+1;$j<count($arr);$j++){ 
  20.    if($arr[$i]>$arr[$j]){ 
  21.     $temp = $arr[$i]; 
  22.     $arr[$i] = $arr[$j]; 
  23.     $arr[$j] = $temp
  24.    } 
  25.   } 
  26.  
  27.  } 
  28. testArr($arr1); 
  29. print_r($arr1);  //結果:Array ( [0] => -1 [1] => 0 [2] => 5 ) 
  30. /* **************************************************** */ 

三、對象數據類型傳值

  1. class person{ 
  2.  public $name
  3.  public  $age
  4.  
  5. $a = new person(); 
  6. $a->name = '小明'
  7. $a->age = '20'
  8. //變量a在存的是對象的地址,把a賦給b這個變量,實際上就是賦了一個地址。 
  9. $b = $a
  10. $b->age = 30; 
  11. //echo $a->age.$b->age;//結果是:30 30 
  12. //給一個函數參數傳一個對象, 實際上傳的是這個對象的地址; 
  13. function test($k){ 
  14.  $k->age =40; 
  15. //調用 
  16. test($b); 
  17. //echo $a->age.$b->age;//結果是:40 40 
  18. </count

php函數的傳值與傳址有什么區別呢?對于這樣的問題我喜歡通過程序演示來獲取答案,讓我們來看一個演示記錄吧!實例代碼如下:

  1. <?php     
  2.          
  3. $i=100;     
  4.          
  5. function func($n){     
  6.          
  7.    $n=$n+100;     
  8.             
  9.    return $n;     
  10.             
  11. }     
  12. echo '1)函數傳值前變量$i的值:'.$i.'<br>';     
  13. echo '2)傳值后函數的返回值:'.func($i).'<br>';     
  14. echo '3)函數傳值后變量$i的值:'.$i.'<br>';     
  15. echo '4)函數傳址前變量$i的值:'.$i.'<br>';     
  16. echo '5)傳址后函數的返回值:'.func(&$i).'<br>';     
  17. echo '6)函數傳址后變量$i的值:'.$i.'<br>';     
  18. //echo func($i).'<br>';     
  19. ?> 
  20. /* 
  21. 程序輸出: 
  22. 1)函數傳值前變量$i的值:100 
  23. 2)傳值后函數的返回值:200 
  24. 3)函數傳值后變量$i的值:100 
  25. 4)函數傳址前變量$i的值:100 
  26. 5)傳址后函數的返回值:200 
  27. 6)函數傳址后變量$i的值:200 
  28. */ 

解釋:

1)直接輸出一個賦值$i=100的變量

2)func函數傳值返回一個算術相加的結果$=100+100

3)func函數傳值,其作用區域只限于函數內部,對外面的變量$i不會有影響

4)同上

5)func函數參數前多了個"&"符,表示傳址,和2)一樣,返回值是函數的算術運行結果。

6)func(&$i),變量指針指向$i的位置,可以理解為是對變量$i的操作,$i=$i+100;這時變量$i已經相當于重新被賦值

如果去掉上面代碼的第18行注釋,會得什么結果呢?

小結:傳址為了在執行函數的同時,同時改變函數參數值,而傳值不期望改變.

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲精品成人网 | 亚洲成人免费在线观看 | 手机看片日韩日韩韩 | 亚洲成人99 | 亚洲免费片 | 精品视频一区二区三区四区 | h在线网站 | 国产精品精品国产一区二区 | 在线亚洲精品国产成人二区 | www.97av| 视频三区 | free性日韩高清videos | 免费的禁片 | 国产精品女上位在线观看 | 亚洲一区二区三区精品视频 | 综合五月| 青青青青久久精品国产一百度 | 久久亚洲国产 | 伊人影院在线播放 | 69热视频| 色网站综合 | 2020年国产一国产一级毛卡片 | 亚洲乱码一二三四区 | 538在线视频二三区视视频 | 久久91精品国产一区二区 | 欧美亚洲第一页 | 欧美成人精品高清在线播放 | 一级女人18片毛片免费视频 | 免费观看无遮挡www的小视频 | 亚洲国产综合网 | 色站综合 | 男人把大ji巴放进男人免费视频 | 国内精品一区二区三区αv 国内精品一区二区三区东京 | 日本高清不卡码 | 国产福利乳摇在线播放 | 亚洲欧美一区二区三区另类 | 多人伦交性欧美精品欧 | 亚洲天堂在线观看视频 | 国产欧美一区二区精品久久久 | 亚州免费视频 | 最近最新中文字幕在线第一页 |