2011-03-18 28 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的迭代过程中发生的。也许断开连接。

相关问题