这个问题可能会得到其中一个标记,但我仍然想问一下并希望得到一个答案,这对于知识渊博的程序员来说可能非常简单。
所以在C ++中,有一个getline()函数只是一行一行地读取一个while循环。在PHP中,数据库查询结果可以通过mysql_fetch_row等获取......并且可能还有更多示例(如果您知道,在您的答案中列出它们肯定会得到我的投票)。所以我想知道这些函数如何知道转到下一行或结果?有某种内置迭代器,功能跟踪和更新?
非常感谢描述性答案。
答案 0 :(得分:1)
对于文件读取,有一个EOF
(文件结束)标记或is_eof(pointer)
函数来检测文件结束(它们通常链接到OS核心内部)。文件行由系统EOL
分隔符\n\r
,\n
或\r\n
标记。
对于数据库结果集读取,有一个由数据库开发人员提供的通用API,允许使用几乎相同的功能,即。即"结果集结束"或者" Go To Line"。例如,在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中,最常见的操作已由供应商为您完成。