麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > PHP > 正文

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

2024-09-04 11:48:15
字體:
來源:轉載
供稿:網友

在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行注釋,會得什么結果呢?

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 激情小说激情电影 | 91午夜视频 | 青青草国产在线视频 | 超碰99在线观看 | 久久精品视频在线免费观看 | 久久一级 | 久久综合综合 | 美女视频大全网站免费 | 国产成年人在线观看 | 高清视频91 | 美女视频网站黄色 | 成人毛片100免费观看 | 在线成人www免费观看视频 | 日韩精品久久久久久久电影99爱 | 国产精品亚洲综合一区二区三区 | 亚洲午夜电影 | 99国产精成人午夜视频一区二区 | 中文在线国产 | 羞羞视频免费网站 | 久久久久久免费 | 91真视频 | 一级毛片电影院 | 久久久久国产成人精品亚洲午夜 | 在线观看免费毛片视频 | 亚洲伊人色欲综合网 | 国产精品亚洲激情 | 一区二区久久精品66国产精品 | 久久成人国产精品 | 国产日产精品一区二区三区四区 | 狠狠干夜夜草 | 国产羞羞视频在线观看 | 99精品视频在线观看免费播放 | 色日本视频 | 七首小情歌泰剧在线播放 | 欧美高清一级片 | 亚洲特黄a级毛片在线播放 久久久入口 | 深夜福利视频免费观看 | 精品一区二区三区免费看 | 成人三级视频网站 | 二级大黄大片高清在线视频 | av国产片 |