程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> php函數前面加&符號的意思,函數的引用返回的作用

php函數前面加&符號的意思,函數的引用返回的作用

編輯:PHP基礎知識
 

PHP代碼:
基本形式:
function &find_var($param) //這裡用&在對象前面,作用為聲明
{
    /* ...code... */
    return $found_var;
}

$foo =& find_var($bar); //這裡用&,作用為聯系變量
$foo->x = 2; //賦值給函數
 
例子:
function &test()   
{   
static $b=0;//申明一個靜態變量   
$b=$b+1;   
echo $b;   
return $b;   
}   
$a=test();//這條語句會輸出$b的值為1,
$a=5;   
$a=test();//這條語句會輸出$b的值為2 ,因為沒有引用返回,$a=5,不對對象起賦值作用
$a=&test();//這條語句會輸出$b的值為3 ,成功引用返回,下面的代碼起作用
$a=5;   
$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代碼 
function &test()   
{   
static $b=0;//申明一個靜態變量   
$b=$b+1;   
echo $b;   
return $b;   
}   
  
$a=&test();//這條語句會輸出 $b的值 為1   
$a=6;   
test();//這條語句會輸出$b的值 為7 
 
php變量前面加&符號是什麼意思


先看一個示例


Php代碼 

 
$foo = 321;
$bar = &$foo; 
$bar = 123;
print $foo;那麼輸出的結果將會是什麼呢


Php代碼 
123    
  
為什麼會這樣呢?


改動新的變量將影響到原始變量,這種賦值操作更加快速。
注意:只有命名變量才可以傳地址賦值,就是說,改變了$bar的值,也就改變了$foo的值了。
 
另一個例子:

$_GET[1] = 1;
function &a()
{
 $a = $_GET[1];
 return $a;
}
$x =& a();
$x = 'MoontoC';
echo $_GET[1]; // 此時這裡會顯示 MoontoC, 而不是最初賦值的1, 你明白其中的意義了嗎, 使用函數傳值時必須雙方都使用引用符號才有意義,才能真正引用, 而任何一邊少了引用符號, 都不會得到錯誤的內容, 但內容是傳值, 而不是傳引用了。沒有程序基礎的人最初學php的確很難理解傳值和傳引用的重要性, 覺得反正都能得到自己要的東西, 其實不是的, 很多時候雖然得到的東西一樣, 但是代價卻完全不一樣, 一個長達200萬字的值, 被當作值傳送就是400萬字同時放在內存中待用, 多耗費一倍內存的意思,而傳引用就只是一個快捷方式傳送過去而已。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved