PHP:将数组传递给MongoCollection时的奇怪效果#insert()

时间:2013-07-30 15:22:41

标签: php mongodb

在PHP中,数组按值分配。因此,当我做这样的事情时:

$a = ['a' => 'ape'];
$b = $a;

$a['b'] = 'banana';

只有$ a的密钥为'b',但$ b不会被修改。当通过引用将一个数组分配给一个函数并且该函数修改数组时,这也适用。

但是,如果我尝试使用PECL MongoDB扩展插入文档,则会发生奇怪的事情。在下面的单元测试中,第二个断言对我来说失败了:

public function testUpdateGeneratesId()
{
  $doc1 = ['author' => 'j.henning', 'title' => 'My Blog Entry'];
  $doc2 = $doc1;

  $this->blog->insert($doc1, ['w' => 1]);

  $this->assertNotNull($doc1['_id']);
  $this->assertArrayNotHasKey('_id', $doc2);
}

#insert()在插入的文档上生成键'_id',但我希望该键只能添加到$ doc1。但是,它是在两个阵列上创建的。

有人可以重现这种行为或给出任何解释吗?

1 个答案:

答案 0 :(得分:0)

这听起来像是与https://jira.mongodb.org/browse/PHP-410相关的错误 - 您可以在https://jira.mongodb.org/browse/PHP为此提交一个新错误吗?