数组中的项目是否引用?

时间:2011-03-22 00:44:49

标签: php pass-by-reference

查看下面的代码:

$index = GetIndexForId($itemid);

$item = null;

if( $index == -1 )
{
    $item = array();
    $this->items[] = $item;
    $index = count($this->items)-1;
}
else
    $item = $this->items[$index];

$item['id'] = $itemid;
$item['qty'] = $qty;
$item['options'] = $options;

$this->items[$index] = $item; // This line is my question

最后一行,是否有必要?我真的不知道php如何处理数组赋值。

P.S。 GetIndexForId只搜索当前ID是否已存在于数组中,其他“未声明”变量是参数。

3 个答案:

答案 0 :(得分:3)

来自documentation

  

数组赋值始终涉及值复制。使用引用运算符通过引用复制数组。

所以是的,鉴于您的代码,最后一行是必要的,但$this->items[] = $item;是多余的。

答案 1 :(得分:1)

如果您想更新您的对象,是的,您需要最后一行

答案 2 :(得分:-1)

任何值类型(如boolean,int ...)都不会通过引用传递。但是如果你的数组中充满了对象,它将通过引用传递。在你的例子中,你需要最后一行。但正如我所说,如果$ item是一个对象,你将不需要最后一行。可以通过引用传递值类型和引用运算符。

了解如何使用参考运算符 HERE