这个问题可能会得到其中一个分数,但我仍然想问并希望得到一个答案,这对知识渊博的程序员来说可能非常简单。
所以在C++中,有一个getline()函数,它只读取一行接一行的while循环。在PHP中,数据库查询结果可以通过mysql_fetch_row等获取。可能还有更多的例子(如果你知道的话,在你的答案中列出它们肯定会得到我的支持)。所以我想知道这些函数是如何进入下一行或结果的?有某种内置迭代器,函数可以跟踪和更新吗?
我们非常感谢描述性的答案。
-
对于文件读取,有一个
EOF
(文件结束)标记或is_eof(pointer)
函数来检测文件结束(它们通常链接到操作系统内核内部)。文件行由系统EOL
分隔符'n'r
、'n
或'r'n
标记。 -
对于数据库结果集读取,有一个由数据库开发人员提供的通用API,它允许使用几乎相同的功能,即"是结果集的结尾"或"转到行"。例如,在php(+MySQLi)中,有一个
mysqli_data_seek()
函数或方法。
因此,读取的常见循环可能看起来像以下伪代码:
handle = getResourceHandle(args); // create a pointer to resource
while(not isEOF(handle)){ // while end of resource is not reached
row = getRow(handle); // read current row
// some processing
nextRow(handle); // move system row pointer to the next row
}
closeResourceHandle(handle); // free pointer to resource
前面的例子显示了函数方法,但是对于OOP,封装了很多细节:
Resource r = new Resource(args); // getResourceHandle() + other operations
while(not r->isEnd()){ // while not isEOF(handle)
row = r->getRowAndMoveToNext(); // getRow(handle) + nextRow(handle);
// some processing
}
destroy r; // closeResourceHandle(handle) + other operations
因此,最后,对于"低级别编程"的函数方法,您"必须"跟踪行/行,并自己检查资源是否为非空。在OOP中,大多数常见的操作已经由提供者为您完成。