PHP: может iterator_to_array () вызвать исключение на MongoCursor - PullRequest
3 голосов
/ 18 марта 2011

Может ли использование iterator_to_array() на экземпляре MongoCursor вызвать исключение в PHP 5.3?Другими словами, нужно ли обернуть iterator_to_array() вызовы в MongoCursor экземплярах в операторах try-catch или нет?

например,

$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) {
    //...
}

Ответы [ 3 ]

1 голос
/ 18 марта 2011

iterator_to_array() может выдавать исключения, потому что вызывает next () .

0 голосов
/ 19 марта 2011

Метод Find возвращает объект Traversable или генерирует исключение.

Iterator_to_array принимает объект Traversable.

Исключение должно появляться, только если во время итерации в драйвере Mongo или в Mongo происходит что-то действительно плохое.Возможно отключение.

0 голосов
/ 18 марта 2011

Я думаю, что первый комментарий на данный момент на этой странице 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 может выдатьисключение, в то время как вы могли бы использовать курсор, когда курсор действительно действовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...