2016-03-07 88 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的一個很好的解釋。