我对PHP很新,只是尝试转换我在C中所做的事情。从我教过的C文件中读取的习语是:
while ((c = getchar()) != EOF) {
doSomethingWith(c);
}
我已经完成了一些阅读,似乎在PHP中执行此操作的“正确”方法是:
while (!feof($file)) {
$c = fgetc($file);
doSomethingWith($c);
}
我的问题是:可以将两者合并如下(我已经尝试过了,它在我的测试文件上运行正常),还是在EOF之前可以找到空的情况?:
while (($c = fgets($f)) != null) {
doSomethingWith($c);
}
提前干杯
史蒂夫
答案 0 :(得分:2)
没关系,但是你这样做的方式是错的(至少“根本不正确”)。 fgets()
返回false
,如果到达文件的末尾,则应该针对false
进行测试。它适用于您,因为在使用布尔值进行比较时,您使用“简单”等式运算符(==
),即null
到false
。
返回最长为length的字符串 - 从handle指向的文件中读取1个字节。如果在文件指针中没有要读取的数据,则返回FALSE。
如果发生错误,则返回FALSE。
这意味着,它必须看起来像
while (($c = fgets($f)) !== false) {
doSomethingWith($c);
}
答案 1 :(得分:0)
fgets
,以便在没有更多数据需要阅读时返回false
。因此,技术上正确的解决方案将是
// Notice the !== [non-identical] operator below
while (($c = fgets($f)) !== false) {
doSomethingWith($c);
}
这样做更好,因为fgets
可以合法地返回一个空(零长度)字符串,当使用相等运算符时,该字符串将等于null
。运算符!==
还检查其操作数的类型,这样就可以了。