2010-11-23 69 views
0

我是一般的編程人員,特別是參考文獻。我想通過引用來處理數組中的單個對象,這樣我就不會僅僅關注要粘貼到數組中的對象的副本。我的問題是如何做到這一點。PHP中的參考和數組

例如,假設我有這些行的代碼:

$obj0 = blah; 
$obj1 = blah; 
$obj2 = blah; 
$myArray = array($obj0, $obj1, $obj2); 

當我現在訪問和修改$myArray[1],這將是相同的修改$obj1?或者我需要修改&$myArray[1]而不是?

+0

您是否使用PHP5和那些$ objN實際的對象,或變量? – Orbling 2010-11-23 20:42:34

+0

是的,我使用的是PHP5,我希望它們是以對象作爲值的變量。對不起,如果我對我的問題感到困惑/困惑。 – Mark 2010-11-23 20:50:21

回答

1

既然這樣,沒有你將不會改變最初的變量。

如果您希望通過引用的方式來完成此操作,那麼您在設置數組時應該將這些&符號放在一起。

$myArray = array(&$obj0, &$obj1, &$obj2); 

代碼:

$a = "cat"; $a1 = "cat"; 
    $b = "dog"; $b1 = "dog"; 
    $arrRef = array(&$a, &$b); $arrCopy = array($a, $b); 
    $arrRef[0] .= "food"; $arrCopy[0] .= "food"; 
    $arrRef[1] .= "house"; $arrCopy[1] .= "house"; 
    echo "a: $a b: $b <br />"; 
    echo "a1: $a1 b1: $b1 <br />"; 

輸出:

a: catfood b: doghouse 
a1: cat b1: dog 
0

在PHP5中,默認情況下,對象被稱爲「通過引用」,因此不需要在「&」前加上$myArray[1]

+0

-1聲明「PHP5對象被引用調用」必須死亡。我知道它是在官方的PHP文檔中,但它顯然是錯誤的! PHP對象實際上是通過引用綁定到變量的,是的。但是這些引用被複制'='或當它作爲參數使用,就像任何其他變量。如果你真的想要「通過引用」語義,唯一的(唯一)方法是使用&運算符。請參閱@thisMayhem回答 – 2010-11-23 20:55:55

1

不,修改$myArray[1]與修改$obj1不一樣。但是,如果您正在對它們指向的對象進行操作,則該對象將被更改。

換句話說:

// Does not affect $obj1, but it does affect $obj1->foo 
$myArray[1]->foo = "bar"; 

// Does not affect $obj1, which continues to point to the same object 
$myArray[1] = null;