2016-03-07 50 views
2

我们从MongoDB驱动程序中使用某些函数来迭代游标,我们可以使用“hasNext()”和“getNext()”。但是我们也可以使用简单的PHP foreach来迭代游标,我们不必调用上述方法。PHP的MongoDB游标如何工作?

我的问题是,如果foreach是简单的PHP函数,它如何与MongoDB一起工作?它如何从光标获取记录?它内部使用MongoDB的“cursor.forEach()”,还是内部运行“hasNext()”和“getNext()”?

任何帮助将不胜感激。

回答

3

MongoCursor类实现Iterator接口。因此,与光标相同的是,调用$cursor->next(),然后检查$cursor->valid(),然后从$cursor->current()获得值(重复,直到validfalse)。对于$key => $value格式,它也获得值$cursor->key()

它执行一些内部运行,但没有运行“hasNext()”,“getNext()”等。它运行在Iterator接口中抽象描述的标准方法。

对不起,我的唠叨,但foreach不是“简单的PHP函数”;这是一种语言结构。我刚刚在Stack Overflow上找到了关于the difference的一个很好的解释。