0

在 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。但是,它是在两个阵列上创建的。

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

4

1 回答 1

0

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

于 2013-07-30T15:56:10.790 回答