0

PHP では、配列は値によって割り当てられます。したがって、私がこのようなことをすると:

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

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

$a だけがキー 'b' を持ちますが、$b は変更されません。これは、いずれかの配列が参照によって関数に割り当てられ、その関数が配列を変更する場合にも適用されます。

しかし、PECL MongoDB 拡張機能を使用してドキュメントを挿入しようとすると、奇妙なことが起こります。次の単体テストでは、2 番目のアサーションが失敗します。

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 に答える