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;