在 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。但是,它是在两个阵列上创建的。
任何人都可以重现这种行为或给出任何解释吗?