2010-06-08 30 views
4

我問這個MongoDB的用戶組中,但沒有滿意的回答,所以 - 也許有人在計算器能賜教:php/mongodb:引用如何在PHP中工作?

編輯:

我已經重寫我的問題,因爲顯然不清楚,發生了什麼 - 請在回答之前嘗試我的測試代碼。謝謝!

<?php 

// test: a 
$data = array('x' => 1); 

function a(&$data) { 
    $m = new mongo(); 
    $c = $m->selectDB('test')->selectCollection('test'); 

    $c->insert($data); 
} 

a($data); 
print_r($data); 

// test: b 
$data = array('x' => 1); 

function b($data) { 
    $m = new mongo(); 
    $c = $m->selectDB('test')->selectCollection('test'); 

    $c->insert($data); 
} 

b($data); 
print_r($data); 

// test: c 
$data = array('x' => 1); 

function c(&$data) { 
    $data['_id'] = new MongoId(); 
} 

c($data); 
print_r($data); 

// test: d 
$data = array('x' => 1); 

function d($data) { 
    $data['_id'] = new MongoId(); 
} 

d($data); 
print_r($data); 

?> 

輸出:

Array 
(
    [x] => 1 
) 

Array 
(
    [x] => 1 
    [_id] => MongoId Object 
     (
     ) 

) 

Array 
(
    [x] => 1 
    [_id] => MongoId Object 
     (
     ) 

) 

Array 
(
    [x] => 1 
) 

我的問題:爲什麼比我的純PHP函數調用傳遞通過引用顯然對工作蒙戈插入不同?

謝謝!

回答

0

當你有類似$ref = &$someVar$ref現在指的是$someVar

編輯:

MongoDB Manual at PHP.net的說:

#1 MongoCollection ::插入()_id例如 插入對象將一個_id字段添加到它,除非它傳遞通過參考

<?php 

$a = array('x' => 1); 
$collection->insert($a); 
var_dump($a) 

$b = array('x' => 1); 
$ref = &$b; 
$collection->insert($ref); 
var_dump($ref); 

?> 
+0

是的,我知道。如果我然後將$ ref傳遞給一個接受參數(比如我的測試函數)的函數,那麼$ ref($ someVar)可以增加更多的數據。 ...但是mongodb-insert不能以這種方式工作。我的問題:爲什麼mongodb-insert方法表現得像它的行爲? – aurora 2010-06-08 19:22:14

+0

babiker,據我所知,文件告訴我。感謝您的幫助,但它不回答我的問題:我不明白這種行爲背後的意義。誰在幕後做魔術?誰保留$ ref從$ ref,爲什麼這種行爲不同於我的普通php測試的行爲? – aurora 2010-06-09 06:13:40

+0

我也想知道魔法從哪裏來 – kylehyde215 2015-05-14 15:49:45