php function 定義時函數名前加&符號的意義


問題:php在聲明函數時,函數名前面的&符號有什么用?

一直想不通.很多帖子說類似於變量的$a=&$b,但是$b在聲明的時候前面可沒有加&符號啊?那么這個函數名前面加&有什么用呢?

 

很多人看的都是網上的例子,先用網上例子試一下:

function &test(){
    static $b = 0;  //聲明一個靜態變量
    $b = $b+1;
    return $b;
    }
   $a = test();   //輸出 $b 的值為:1
   $a = 5;
   $a = test();     //輸出 $b 的值為:2
   
   $a = &test();  //輸出 $b 的值為:3  
   $a = 5;           //$b的值變為了5
   $a = test();    //輸出 $b 的值為:6  
這看不出什么,$a是函數test的引用嗎?那么繼續
function &test(){
    static $b = 0;  //聲明一個靜態變量
    $b = $b+1;
    return $b;
    }
   $a = test();   //輸出 $b 的值為:1
   $a = 5;
   $a = test();     //輸出 $b 的值為:2
   
   $a = &test();  //輸出 $b 的值為:3  
   echo $a;       //輸出$b 的值還是3  


也就是說,如果$a是test函數的引用,那么echo $a的話會再次調用函數,那么$b的值會再次加1才對

但是$a的值沒有變,也就是說,$a保存的是test函數返回值的引用,即$b的引用.所以說相當於$a=&$b.

也正因為如此,如果要實現對函數結果的引用:

1.在賦引用的時候,test前要加&

2.在聲明的時候函數名前要加&,表示可以返回函數執行結果的一個引用

3.同時函數必須有返回值,廢話,沒返回值那引用誰?

舉個沒有歧義的例子:

function &abc($n){

  $arr=array('aaa','bbb','ccc');

  return $arr[$n];  //將數組的第二個元素返回 

}

$tem=&abc(1); //這里只能得到數組的第二個元素的引用,因為只返回了第二個元素

$tem='ddd';  //這里將數組的第二個元素的值改變成了'ddd'

是不是更好理解?


這個特點一般用來返回一些比較占空間的值,比如大的字符串等,但由於php的寫時復制特點,這個技巧一般用的不多,

但是當你需要對函數運算結果進行即時修改的話,那就可以用這個技巧了.

 

php函數前面加&符號的意思是函數的引用返回,php函數前面加&符號有什么作用呢  

Php代碼   收藏代碼
  1. function &test()  
  2. {  
  3. static $b=0;//申明一個靜態變量  
  4. $b=$b+1;  
  5. echo $b;  
  6. return $b;  
  7. }  
  8.   
  9. $a=test();//這條語句會輸出 $b的值 為1  
  10. $a=5;  
  11. $a=test();//這條語句會輸出 $b的值 為2  
  12. $a=&test();//這條語句會輸出 $b的值 為3  
  13. $a=5;  
  14. $a=test();//這條語句會輸出 $b的值 為6  

 

下面解釋下: 
通過這種方式$a=test();得到的其實不是函數的引用返回,這跟普通的函數調用沒有區別.


至於原因: 這是PHP的規定
php規定通過$a=&test(); 方式得到的才是函數的引用返回.


至於什么是引用返回呢(PHP手冊上說:引用返回用在當想用函數找到引用應該被綁定在哪一個變量上面時。)

 

用上面的例子來解釋就是
$a=test()方式調用函數,只是將函數的值賦給$a而已, 而$a做任何改變 都不會影響到函數中的$b.
而通過$a=&test()方式調用函數呢, 他的作用是將return $b中的 $b變量的內存地址與$a變量的內存地址,
指向了同一個地方. 即產生了相當於這樣的效果($a=&b;) 所以改變$a的值,也同時改變了$b 的值 ,所以在執行了:
$a=&test();  $a=5; 以后,$b的值變為了5 ......

 

php函數前面加&符號是什么意思?有的函數前面會加&,因為很少見到,所以不明白php函數前面加&符號是什么意思

那么,php函數前面加&符號有什么作用呢

 

Java代碼   收藏代碼
  1. function &test()  
  2. {  
  3. static $b=0;//申明一個靜態變量  
  4. $b=$b+1;  
  5. echo $b;  
  6. return $b;  
  7. }  
  8.   
  9. $a=&test();//這條語句會輸出 $b的值 為1  
  10. $a=6;  
  11. test();//這條語句會輸出$b的值 為7  

php變量前面加&符號是什么意思

先看一個示例 

Php代碼   收藏代碼
  1. $foo = 321;  
  2. $bar = &$foo;   
  3. $bar = 123;  
  4. print $foo;  

那么輸出的結果將會是什么呢

Php代碼   收藏代碼
  1. 123    

 

為什么會這樣呢?

改動新的變量將影響到原始變量,這種賦值操作更加快速

 

注意:只有命名變量才可以傳地址賦值

就是說,改變了$bar的值,也就改變了$foo的值了


https://justcoding.iteye.com/blog/652937
原文:https://blog.csdn.net/csdn_dengfan/article/details/53907416


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM