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

首頁 > 語言 > PHP > 正文

php函數引用返回的詳解

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

函數引用與php中變量引用一樣使用的是&符號了,今天我們就一起來看看函數的引用返回的一些例子,希望這些例子能夠對各位有幫助.

引用返回

手冊里是這么寫的:引用返回用在當想用函數找到引用應該被綁定在哪一個變量上面時。不要用返回引用來增加性能,引擎足夠聰明來自己進行優化。僅在有合理的技術原因時才返回引用!要返回引用

當你想將函數的返回引用綁定到某個變量時,PHP允許你這么做:

  1. function &returns_reference() 
  2.     static $someref = 0; 
  3.     $someref++; 
  4.     return $someref
  5.  
  6. $newref = &returns_reference();//引用返回,相當于 $newref = &$someref; 
  7. echo $newref//1 
  8. //Vevb.com 
  9. $notref = returns_reference(); //值傳遞的是副本 
  10. $newref = 100; 
  11. echo $notref//2 
  12.  
  13. $newref = 100; 
  14. echo returns_reference(); //101 

可見,想讓函數返回引用,必須在函數申明和賦值時都帶上&操作符.

對于類中方法也是如此:

  1. class foo { 
  2.     public $value = 0; 
  3.  
  4.     public function &getValue() { 
  5.         return $this->value; 
  6.     } 
  7.  
  8. $obj = new foo; 
  9. $myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42. 
  10. $obj->value = 2; 
  11. echo $myValue

一些簡單的例子

看下面的簡單例子,嘗試去理解引用返回.

  1. <?php 
  2. function &test() 
  3.  // 聲明一個靜態變量 
  4.     static $b = 0; 
  5.     $b = $b+1; 
  6.     echo $b
  7.     return $b
  8. $a = test(); //這條語句會輸出 $b 的值為 1 
  9. $a = 5; 
  10. $a = test(); //這條語句會輸出 $b 的值為2 
  11. $a = &test(); //這條語句會輸出 $b 的值為3 
  12. $a = 5; 
  13. $a = test(); //這條語句會輸出 $b的值 為6 
  14. ?> 
  15. //程序運行結果: 

盡管函數聲明方式是 function &test() 這樣,但我們通過這種方式 $a = test() 的函數調用得到的其實不是函數的引用返回,這跟普通的函數調用沒有區別。PHP 規定通過 $a = &test() 這種方式得到的才是函數的引用返回。

用上面的例子來解釋就是,$a = test() 這種方式調用函數,只是將函數的值賦給 $a 而已,而$a做任何改變都不會影響到函數中的$b。

而通過 $a = &test() 方式調用函數呢,它的作用是將 return $b 中的 $b 變量的內存地址與 $a 變量的內存地址指向了同一個地方。即產生了相當于這樣的效果 ($a=&$b), 所以改變 $a 的值也同時改變了 $b 的值。所以在執行了

$a = &test();

$a = 5;

以后,$b的值變為了5。

再來個程序例子加深理解:

  1. <?php 
  2. /* 
  3. ** 值傳遞和引用傳遞,值傳遞傳遞的是值的一個復本,引用傳遞傳遞的是值指向的內存地址 
  4. */ 
  5. // 函數的引用,定義時也要加上 & 
  6. function &func($a,$b){   
  7.  // 這里為了更直觀看到效果,定義一個靜態變量 
  8.  static $result = 0;    
  9.  $result+=$a+$b
  10.  echo $result.'<br />'
  11.  return $result
  12.  
  13. $a = $b = 10; 
  14. // PHP里這樣寫函數的引用調用,和調用普通函數沒有區別(只是將函數的返回值復制給$c這個變量,$c做任何改變不會影響上面函數中的$result) 
  15. // 要記住:PHP里的函數引用定義及調用都要在函數名前加上 & 
  16. $c = func($a,$b);  
  17. // 第一次執行func(),其靜態變量$result的值變為 20(10+10) 
  18. // 改變$c的值,不會對下面一行語句產生影響 
  19. $c = 666;   
  20. // 第二次執行func(),其靜態變量$result的值變為 40(20+10+10) 
  21. $c = func($a,$b); 
  22. echo '<hr />'
  23. // 這樣才是PHP中引用函數的調用方式 
  24. $d = &func($a,$b);   
  25. // 第三次執行func(),其靜態變量$result的值變為 40(40+10+10) 
  26. $d = 888; 
  27. // 第四次執行func(),其靜態變量$result的值變為 908(888+10+10) 
  28. $d = func($a,$b); 
  29. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91久久久久久亚洲精品禁果 | 欧美日韩一 | 亚洲欧美日韩在线 | 毛片在线视频免费观看 | 亚洲第五色综合网 | 日本中文字幕高清 | 97超级碰碰人国产在线观看 | 中文字幕在线视频日本 | 在线观看视频毛片 | 国产在线观看 | 国产成人精品免费视频大全最热 | 欧美亚洲一区二区三区四区 | 国产成人精品免费视频大全最热 | 亚洲国产视频网 | 色999久久久精品人人澡69 | 91美女视频在线 | 69av导航| 久久国产一级片 | 欧美性色生活片免费播放 | 亚洲电影在线播放 | 久久精品之 | 久久国产精品一区 | 草久免费 | 精品一区二区久久久 | 久久99精品视频在线观看 | 欧美日韩亚洲精品一区二区三区 | 国产毛片毛片毛片 | 国产精品99精品 | 亚洲四播房| 久久久国产精品免费观看 | 成人不卡免费视频 | 日韩精品中文字幕一区 | 成人三级电影网 | 免费毛片电影 | 国产99视频在线观看 | 大片毛片 | 日韩精品中文字幕一区二区三区 | 国产91大片 | lutube成人福利在线观看 | 国产免费一级淫片a级中文 99国产精品自拍 | 欧美wwwsss9999 |