2011-03-22 50 views
-1

看看下面的代码:数组中的项目,它们是否是引用?

$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是否已经存在于数组中,而其他“未声明的”变量是参数。

+0

我喜欢收到-1的从一个问题,我发布3.5年前。无论你是谁,请留下评论为什么?!?!?! – TJMonk15 2014-09-17 05:05:21

回答

-1

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

了解如何使用引用操作符 ​​

+0

做阵列在php中算作“对象”? (用于C#),每个“项目”被定义为一个数组... – TJMonk15 2011-03-22 01:26:27

+0

不。不像大多数OOP语言,其中一切都是对象,在PHP中,只有显式对象被视为“对象”。 – 2011-03-22 01:33:01

+0

不,数组中的不同类型的事物之间没有区别。除非您明确指定'&',否则所有内容都按值存储,在这种情况下,它将通过引用来指定。 “对象”在PHP 5中不是值。你拥有的是对象引用。如果没有'&,它们将按值存储。 – newacct 2012-12-21 19:39:19

1

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

+0

$ index = count($ this-> items)-1;处理你构成的问题,但是ty – TJMonk15 2011-03-22 00:49:20

+0

你是什么意思?如果你想更新'$ this-> items [$ index]',你需要最后一行来更新'$ this-> items [$ index]' – 2011-03-22 00:52:15

+0

ok ,多数民众赞成我的想法,但你说[你删除的东西],我不记得到底是什么。 – TJMonk15 2011-03-22 00:56:11

3

documentation

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

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

+0

你可以通过索引添加一个项目并让阵列的“密钥”正确更新? – TJMonk15 2011-03-22 01:27:04

+0

使下一个数组项目的“钥匙”... ... – TJMonk15 2011-03-22 01:54:48

+0

@ TJMonk15:我真的不明白你想要什么。 – 2011-03-22 07:25:48

相关问题