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 にのみ追加されると予想されます。ただし、両方のアレイで作成されます。
誰でもこの動作を再現したり、説明したりできますか?