我们使用MongoDB驱动程序中的某些函数就像迭代游标一样,我们可以使用“hasNext()”和“getNext()”。但是我们也可以使用简单的PHP的foreach来迭代游标,我们不必调用上面的方法。
我的问题是如果foreach是简单的PHP函数,它如何与MongoDB一起使用?它是如何从光标中获取记录的?它在内部使用MongoDB的“cursor.forEach()”还是在内部运行“hasNext()”和“getNext()”?
非常感谢任何帮助。
答案 0 :(得分:3)
MongoCursor类实现Iterator
接口。因此,foreach
光标与调用$cursor->next()
相同,然后检查$cursor->valid()
,然后从$cursor->current()
获取值(重复直到valid
为false
)。对于$key => $value
格式,它也会获得$cursor->key()
的值。
它执行一些内部运行,但它没有运行“hasNext()”,“getNext()”等。它运行在Iterator
接口中抽象描述的标准方法。
抱歉我的好斗,但foreach
不是“简单的PHP功能”;这是一种语言结构。我刚刚在Stack Overflow上找到了关于the difference的一个很好的解释。