2011-03-18 51 views
3

異常使用iterator_to_array()MongoCursor實例可以拋出一個異常,在PHP 5.3?換句話說,我是否需要在try-catch語句中將實例的iterator_to_array()調用包裝起來?PHP:可以iterator_to_array()拋出一個MongoCursor

例如,

$mongo = new Mongo(); 
$mongo_db = $mongo['my_database']; 
$mongo_coll = $mongo_db['my_collection']; 

// This 

$cursor = $mongo_coll->find(); 
$documents = iterator_to_array($cursor); 

// Versus this. 

$cursor = $mongo_coll->find(); 
try { 
    $documents = iterator_to_array($cursor); 
} catch (Exception $e) { 
    //... 
} 

回答

1

iterator_to_array()因爲它調用了next()可以拋出異常。

0

我認爲截至目前http://www.php.net/manual/en/mongo.queries.php此頁面上的第一個評論將是你的興趣,但不知道這是否是第一次,當你認爲它所以這裏是應對。

可以檢查光標是用$cursor->valid()有效。 而且評論說你收到後可能不得不倒退光標,因爲有時收到光標時不會倒帶。

... 
$cursor = $mongo_coll->find(); 
$cursor->rewind(); 
if ($cursor->valid()) { 
    $documents = iterator_to_array($cursor); 
} 

優點上述try catch塊是在try catch塊可能會拋出異常,而你也可以使用光標當光標實際上是有效的。

+0

不相信你在php.net的評論中閱讀的所有內容。實際上,$ cursor-> valid()會使AWLAYS在創建遊標後立即返回FALSE,因爲實際的事情只發生在你第一次調用next()時(這就是rewind()基本上這麼做)。 – pingw33n 2011-03-18 19:45:41

+0

這個答案錯了​​,但爲什麼它被接受爲正確的? – andho 2011-03-21 12:25:12

+0

好吧,我得到它,'$ cursor'只會在調用'$ cursor-> next()'後調用迭代對象,而且調用'$ cursor-> rewind()'時,這就是OP慾望。 – andho 2011-03-21 12:27:15

0

查找方法返回Traversable的對象或拋出異常。

Iterator_to_array正在接受Traversable的對象。

例外只應出現,如果事情真的不好在蒙戈驅動程序或Mongo的迭代過程中發生的。也許斷開連接。

相關問題