2012-10-21 54 views
1

可能重複:
Reference - What does this symbol mean in PHP?

是什麼&$variable
傳遞參數,像這樣的含義和功能意義就像

function &SelectLimit($sql, $nrows=-1, $offset=-1, $inputarr=false, $secs2cache=0) 
{ 
    $rs =& $this->do_query($sql, $offset, $nrows, $inputarr); 
    return $rs; 
} 
+2

[參考文獻中的PHP文檔](http://php.net/manual/en/language.references.php) –

回答

6

myFunc(&$var);指變量通過引用傳遞(而不是通過值)。因此,對函數中的變量所做的任何修改都會修改調用的變量。

在功能名稱前面加上&表示「按參考返回」。這有點違反直覺。如果可能,我會避免使用它。 What does it mean to start a PHP function with an ampersand?

注意不要將其與&=&運算符(即completely different)混淆。

快速測試用於通過引用傳遞:

<?php 
class myClass { 
    public $var; 
} 

function incrementVar($a) { 
    $a++; 
} 
function incrementVarRef(&$a) { // not deprecated 
    $a++; 
} 
function incrementObj($obj) { 
    $obj->var++; 
} 

$c = new myClass(); 
$c->var = 1; 

$a = 1; incrementVar($a); echo "test1 $a\n"; 
$a = 1; incrementVar(&$a); echo "test2 $a\n"; // deprecated 
$a = 1; incrementVarRef($a); echo "test3 $a\n"; 
     incrementObj($c); echo "test4 $c->var\n";// notice that objects are 
                // always passed by reference 

輸出:

Deprecated: Call-time pass-by-reference has been deprecated; If you would like 
to pass it by reference, modify the declaration of incrementVar(). [...] 
test1 1 
test2 2 
test3 2 
test4 2 
+0

返回引用不被棄用,但返回的對象引用在某些情況下。 – troelskn

+0

@troelskn是的,我編輯了我的答案。 –

+0

也許值得一提的是,通過引用被廣泛使用在php4中,並且在php5中幾乎從不是一個好主意。 – troelskn

2

的符號 - 「&」 - 被用於指定一個變量的地址,代替它的。我們稱之爲「通過參考」。

因此,「& $變量」是變量的引用,而不是它的值。而「功能& FUNC(...」講述了函數返回的不是變量的副本返回變量的參考

參見:

+0

調用它的地址,有點令人誤解。它是對變量的引用。地址是指內存中的一個位置,例如一個指針。這顯然不是*指針。 – troelskn

+0

@troelskn:我同意,並且大多更新了我的回答以反映這一點。不過,我注意到,對於從未聽說過引用或按價值傳遞的人,他們可以通過將其稱爲「地址」來更容易地理解它。雖然這在技術上可能不是正確的,但它可能是一個有利的角落,可以爲新手們剪綵。 – cegfault

+0

P.S.在許多語言中,通過引用傳遞是通過返回一個指針來實現的(如果將其追溯回底層的C或彙編代碼)。 – cegfault